使用手勢收起鍵盤didSelectRowAtIndexPath不響應

weixin_34208283發表於2016-08-29

正常我們使用endingEditWhenDraging來收起鍵盤,當然,如果再加上tap手勢.使用者體驗會更好一點.

使用tap手勢的話,程式碼很簡單,在tapEvent方法裡面收起鍵盤

UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapEvent:)];

tapGesture.numberOfTapsRequired = 1;

[self.tableView addGestureRecognizer:tapGesture];

但是這樣你會發現,tableView的didSelectRowAtIndexPath不響應了.點選每行cell,touch的view是cell的contentView,所以我們可以通過判斷touch的view是否為cell的contentView,是就不響應tap的方法,這樣就不會和didSelectRowAtIndexPath方法衝突.

具體可通過重寫UIGestureRecognizerDelegate的- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch方法,程式碼如下,有問題留言

UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapEvent:)];

tapGesture.delegate = self;

tapGesture.numberOfTapsRequired = 1;

[self.tableView addGestureRecognizer:tapGesture];

/** 實現手勢的代理方法 */

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {

// 若為UITableViewCellContentView,就不接受tap事件

if ([NSStringFromClass([touch.view class])    isEqualToString:@"UITableViewCellContentView"]) {

return NO;

}

return  YES;

}

相關文章