不知道各位在做開發(fā)的時候,是否有在同一個頁面里既有單擊的手勢,又有tableView的存在的情況,如果有的話,你可能會發(fā)現(xiàn),你的tableView點擊出問題了,打印一下,你會發(fā)現(xiàn),你單擊tableView的cell時,它卻執(zhí)行了你的單擊手勢的方法,只有長按的時候才能執(zhí)行tableView的點擊方法。這就是手勢沖突的問題,要解決這個問題很簡單,因為系統(tǒng)已經(jīng)給我們提供了代理方法。
首先,我們添加一個單擊手勢
UITapGestureRecognizer *tap=[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(keyboardHiden)];
tap.delegate=self;//這句不要漏掉
[self.view addGestureRecognizer:tap];
然后,為我們的手勢添加代理UIGestureRecognizerDelegate
重點來了,手勢代理的方法
#pragma mark-手勢代理,解決和tableview點擊發(fā)生的沖突
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
if ([NSStringFromClass([touch.view class]) isEqualToString:@"UITableViewCellContentView"]) {//判斷如果點擊的是tableView的cell,就把手勢給關(guān)閉了
return NO;//關(guān)閉手勢
}//否則手勢存在
return YES;
}
再試一下,是不是問題解決了?
如果是collectionView 的話,這種方法好像不能用了,但是可以為collectionView的每個cell添加一個單擊的手勢,兩個單擊手勢是不會產(chǎn)生沖突的。