您的位置:首页 > 移动开发 > IOS开发

IOS 不能触发didSelectRowAtIndexPath事件的原因

2015-07-31 17:39 459 查看
IOS 不能触发didSelectRowAtIndexPath事件

今天遇到这个问题,在网上找到了答案,纪录一下

可能原因:

delegate没有设置。

可能tableview被其他控件覆盖。

添加UITapGestureRecognizer手势识别后,UITableView的didSelectRowAtIndexPath失效,两者之间手势发生冲突。

答案:

前两种情况有没有问题,有的话解决掉,没有就跳过。

如果前两种情况都不是,那看看是不是你在什么地方添加了手势,如果添加了可能原因是:

UITapGestureRecognizer截获了touch事件,导致didSelectRowAtIndexPath方法无法响应。

查阅了相关文档后找到了一种可行的解决方法:重写UIGestureRecognizerDelegate中的- (BOOL)gestureRecognizer:(UIGestureRecognizer )gestureRecognizer shouldReceiveTouch:(UITouch )touch方法。

重写内容如下:

[code]- (void)viewDidLoad
 {//注册手势的部分代码如下:
    [super viewDidLoad];
UITapGestureRecognizer *oneTap = [[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(hideKeyBoard)] autorelease];  
oneTap.delegate = self;  
oneTap.numberOfTouchesRequired = 1;  
[self.view addGestureRecognizer:oneTap]; 
}


[code]#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事件的问题!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: