didselect代理方法不走 tableview和collection view

来源:互联网 发布:手机淘宝安全中心网址 编辑:程序博客网 时间:2024/06/05 17:50

项目中所有的didselect方法都不走了

原因是:我项目的tabbar是自定义的   我给tabbar的view添加了一个手势   手势冲突

可参考:http://blog.csdn.net/zhangyanjinlichang/article/details/47173363


可能原因:

  • delegate没有设置。
  • 可能tableview被其他控件覆盖。
  • 添加UITapGestureRecognizer手势识别后,UITableView的didSelectRowAtIndexPath失效,两者之间手势发生冲突。

答案:

  • 前两种情况有没有问题,有的话解决掉,没有就跳过。
  • 如果前两种情况都不是,那看看是不是你在什么地方添加了手势,如果添加了可能原因是: 
    UITapGestureRecognizer截获了touch事件,导致didSelectRowAtIndexPath方法无法响应。 
    查阅了相关文档后找到了一种可行的解决方法:重写UIGestureRecognizerDelegate中的- (BOOL)gestureRecognizer:(UIGestureRecognizer )gestureRecognizer shouldReceiveTouch:(UITouch )touch方法。 
    重写内容如下:
- (void)viewDidLoad {//注册手势的部分代码如下:    [super viewDidLoad];UITapGestureRecognizer *oneTap = [[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(hideKeyBoard)] autorelease];  oneTap.delegate = self;  oneTap.numberOfTouchesRequired = 1;  [self.view addGestureRecognizer:oneTap]; }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
#pragma mark - UIGestureRecognizerDelegate  - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch  {      // 输出点击的view的类名      NSLog(@"%@", NSStringFromClass([touch.view class]));      // 若为UITableViewCellContentView(即点击了tableViewCell),则不截获Touch事件      if ([NSStringFromClass([touch.view class]) isEqualToString:@"UITableViewCellContentView"]) {          return NO;      }      return  YES;  }  再次调试,这回didSelectRowAtIndexPath响应了,解决UITapGestureRecognizer手势截获Touch事件的问题!