2017-09-06 60 views
0

我已經實現了UITableView,其中每個單元格包含一些按鈕 爲了檢測用戶是否點擊了表格,我添加了UITapGestureRecognizer。UITapGestureRecognizer不取消輕拍UITableView元素

我希望單元格中的按鈕在用戶點擊它們時不做任何事情。 我已經實現了這個選擇:

- (void) backgroundTouched:(UITapGestureRecognizer*)sender { 
    UIView *view = sender.view; 
    NSLog(@"backgroundTouched %@", view); 
} 

我看到,當我點擊這個選擇被調用,除非我對任何包含在UITableViewCell中的按鈕輕敲桌面的任何地方。

我該如何避免這種情況?

這裏是一個創建UITapGestureRecognizer代碼:

pragma mark UISearchControllerDelegate 

- (void)didPresentSearchController:(UISearchController *)searchController 
{ 
    NSLog(@"didPresentSearchController"); 
    self.cancelGesture = [UITapGestureRecognizer new]; 
    [self.cancelGesture addTarget:self action:@selector(backgroundTouched:)]; 
    self.cancelGesture.cancelsTouchesInView = YES; 
    [self.tableView addGestureRecognizer:self.cancelGesture]; 
} 
+0

PL。清除你的關注,你想禁用點擊表或按鈕? – Krunal

+0

禁用按鈕。現在當我點擊按鈕按鈕動作被調用,手勢選擇器不會。 我想以其他方式 – RuLoViC

回答

1

如果你不希望你的按鈕做任何事情,禁用按鈕的userInteractionEnabled。

cell.addCashButton.userInteractionEnabled = NO; 
+0

這可行。雖然它在我看來不是非常優雅的解決方案,因爲我必須爲每個單元啓用/禁用,具體取決於searchController是否處於活動狀態 – RuLoViC

0

我的建議:

表有自己的觸摸動作設施使用它的委託方法didSelectRowAtIndexPath

如果你是在自定義單元格使用UIButton然後代替UITapGestureRecognizer您可以在cellForRowAtIndexPath添加按鈕操作方法帶按鈕的tag如下

cellForRowAtIndexPath方法

cell.yourButton.tag = indexPath.row 
[cell.yourButton addTarget:self action:@selector(myButtonActionMethod:) forControlEvents:UIControlEventTouchUpInside] 

,並宣佈按鈕操作方法

-(void) myButtonActionMethod:(UIButton*)sender 
{ 
    NSLog(@"you clicked on button %@", sender.tag); 
}