Objective c UITableView单次单击
我有一个UITableView和UINavigationController,我想区分两次单击:1)选择行的正常单击和2)屏幕上任何其他位置(UINavigationController上的按钮除外)发生的单击。我写了这段代码:Objective c UITableView单次单击,objective-c,ios,uitableview,uinavigationcontroller,Objective C,Ios,Uitableview,Uinavigationcontroller,我有一个UITableView和UINavigationController,我想区分两次单击:1)选择行的正常单击和2)屏幕上任何其他位置(UINavigationController上的按钮除外)发生的单击。我写了这段代码: singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTapHandler:
singleTap = [[UITapGestureRecognizer alloc]
initWithTarget:self action:@selector(singleTapHandler:)];
singleTap.numberOfTapsRequired = 1;
但问题是,它会覆盖选择行的正常单击。我假设您将点击识别器放置在
UIWindow
本身或窗口的唯一子视图上。您需要给点击识别器一个委托,该委托需要实现gestureRecognitor:shouldReceiveTouch:
在该方法中,如果触摸在按钮中或触摸在表格视图单元格中,您希望返回NO
,否则返回YES
。您需要沿着视图层次结构向上走,从触摸屏所在的视图开始,查找这些类中的任何一个
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
for (UIView *view = touch.view; view; view = view.superview) {
if ([view isKindOfClass:[UIButton class]])
return NO;
if ([view isKindOfClass:[UITableViewCell class]])
return NO;
}
return YES;
}
现在还不清楚“屏幕上的其他地方”是什么意思。表格视图是否占据了导航栏下方的整个屏幕?您的意思是希望触摸表格视图行以选择该行并触发点击识别器?表格视图占据导航栏下方的整个屏幕。我只想触摸表视图行以选择该行。触摸其他位置只能触发点击识别器。导航栏上的按钮按下应该只触发按钮按下处理程序。这更清楚了吗?这听起来像是屏幕上唯一你想识别点击的部分在导航栏中,在按钮之外。对吗?对。尽管有效行和无效行的结果不同。