今天心情很不好,很不好啊很不好,客户在测试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这个方法可以去掉其他事件的干扰。。不是很理解啊先实现效果,留着以后慢慢用。