Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c UITableView单次单击_Objective C_Ios_Uitableview_Uinavigationcontroller - Fatal编程技术网

Objective c UITableView单次单击

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:

我有一个UITableView和UINavigationController,我想区分两次单击:1)选择行的正常单击和2)屏幕上任何其他位置(UINavigationController上的按钮除外)发生的单击。我写了这段代码:

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;
}

现在还不清楚“屏幕上的其他地方”是什么意思。表格视图是否占据了导航栏下方的整个屏幕?您的意思是希望触摸表格视图行以选择该行并触发点击识别器?表格视图占据导航栏下方的整个屏幕。我只想触摸表视图行以选择该行。触摸其他位置只能触发点击识别器。导航栏上的按钮按下应该只触发按钮按下处理程序。这更清楚了吗?这听起来像是屏幕上唯一你想识别点击的部分在导航栏中,在按钮之外。对吗?对。尽管有效行和无效行的结果不同。