iOS 7上的UITableView backgroundView手势?

时间:2013-10-08 04:48:30

标签: uitableview ios7 uigesturerecognizer

我有一个视图控制器子类。我正在尝试连接手势识别器以捕获行下方的水龙头。

为此,我在底部有一个空行,因此用户可以随时滚动,因此屏幕上有一个空单元格。我可以轻松地在这一行上捕捉水龙头。

但iOS 7上的提醒支持即使在此之下也可以使用;如果桌子上还有三行空间,那么这三行中的任何一行都可以被点击,而不仅仅是第一行。

例如,您可以点按红色区域:

enter image description here

要在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

2 个答案:

答案 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