我有一个视图控制器子类。我正在尝试连接手势识别器以捕获行下方的水龙头。
为此,我在底部有一个空行,因此用户可以随时滚动,因此屏幕上有一个空单元格。我可以轻松地在这一行上捕捉水龙头。
但iOS 7上的提醒支持即使在此之下也可以使用;如果桌子上还有三行空间,那么这三行中的任何一行都可以被点击,而不仅仅是第一行。
例如,您可以点按红色区域:
要在iOS 6上执行此操作,我在表格中添加了一个背景视图,并为其添加了一个手势识别器:
UIView *backgroundView = [[UIView alloc] init];
[backgroundView addGestureRecognizer:_tapOutsideGesture];
backgroundView.backgroundColor = [UIColor clearColor];
self.tableView.backgroundView = backgroundView;
这适用于6.1,但不适用于7.0。我错过了什么?
我正在使用Xcode 5.0和7.0 SDK构建IPHONEOS_DEPLOYMENT_TARGET = 6.1
。
答案 0 :(得分:2)
在表格视图中添加手势识别器
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(doSomething:)];
tapGesture.delegate = self;
[self.tableView addGestureRecognizer:tapGesture];
并检查水龙头是否在某个单元格上方。
#pragma mark – UIGestureRecognizerDelegate
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
return ![self.tableView indexPathForRowAtPoint:[touch locationInView:self.tableView]];
}
答案 1 :(得分:1)
您可以尝试使用
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch;
UIGestureRecognizerDelegate
的并检查您是哪个视图,如果您在表格单元格中,则返回NO
。
当然,iOS7存在一些问题。
如果您想检查自己是否在UITableViewCell
,则必须在iOS7和iOS6中拨打view.superview.superview
,这是view.superview
。
有关iOS7的更多信息: How to get UITableView from UITableViewCell? https://devforums.apple.com/message/865550#865550