实现tableview中在规定区域滑动的过程中,不进行滑动

今天心情很不好,很不好啊很不好,客户在测试app过程中,就是要ios按照android来做,

整个是个tableview,底部有个指南针的效果,要求是当指南针滑动的时候,tableivew不能滑动,

刚开始我以为很简单,就是 监听这个代理方法:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent*)event{

    [supertouchesBegan:toucheswithEvent:event];

    UITouch*touch = [touchesanyObject];

    CGPointpoint =[touchlocationInView:self.view];

    NSLog(@"touchesBegan--->%f%f",point.y,_start_stopimg.frame.origin.y);

    //如果在视图之上 就忽略

    if(point.y>self.start_stopimg.frame.origin.y){  //判断标点是否已经在范围之内,是的话,就可以禁止tableivew的滑动了

        self.temptableview.scrollEnabled=NO;

        return;

    }

    NSLog(@"禁止下拉事件...");

 //  self.temptableview.scrollEnabled = NO;

}

然后在滑动结束的过程中把tableivew滑动事件打回开来

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent*)event{

    [supertouchesEnded:toucheswithEvent:event];

    self.temptableview.scrollEnabled = YES;


但是这样如果是点击状态下,确认可以实现这个效果,但是如果滑动tableview 却怎么也不行,为什么呢 为什么呢。。从中午上班开始就一直在查找资料,但是效果总是出不来,功夫不负有心人啊 终于找到了一个帖子,看了类似于的功能,开开心心的尝试了,还真可以啊。。哇哇。。。

首先要设置tableivew的两个属性:

self.scrollView.canCancelContentTouches =YES;

self.scrollView.delaysContentTouches =NO;‘

delaysContentTouches表示scrollView的子控件响应触摸事件是否有延迟,NO表示立即响应,YES表示延迟响应;

然后要创建tableview的分类:

重写两个代理方法:

-(BOOL)touchesShouldCancelInContentView:(UIView*)view{

if([view isKindOfClass:[UIButtonclass]]) {

returnYES; 

 }

return[supertouchesShouldCancelInContentView:view];

}

//在触摸事件开始相应前调用- (BOOL)touchesShouldBegin:(NSSet*)touches withEvent:(UIEvent*)event inContentView:(UIView*)view{if([view isKindOfClass:[HBSignViewclass]]||[view isKindOfClass:[UIButtonclass]]) {returnYES; }returnNO;}

这两个方法的可以实现我要的效果:

先调用 touchesShouldBegin,然后点击子控件是按钮,那子控件自己处理这个事件,touchesShouldCancelInContentView这个方法可以去掉其他事件的干扰。。不是很理解啊先实现效果,留着以后慢慢用。





你可能感兴趣的:(实现tableview中在规定区域滑动的过程中,不进行滑动)