3 回答
TA贡献1828条经验 获得超3个赞
好吧,经过一些搜索手势识别器文档后终于找到了它。
解决方案是实现UIGestureRecognizerDelegate并添加以下内容:
////////////////////////////////////////////////////////////
// UIGestureRecognizerDelegate methods
#pragma mark UIGestureRecognizerDelegate methods
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
if ([touch.view isDescendantOfView:autocompleteTableView]) {
// Don't let selections of auto-complete entries fire the
// gesture recognizer
return NO;
}
return YES;
}
这照顾了它。希望这对其他人也有帮助。
TA贡献1829条经验 获得超13个赞
解决此问题的最简单方法是:
UITapGestureRecognizer *tapRec = [[UITapGestureRecognizer alloc]
initWithTarget:self action:@selector(tap:)];
[tapRec setCancelsTouchesInView:NO];
这样可以UIGestureRecognizer识别敲击并将触摸传递给下一个响应者。这种方法的一个意想不到的后果是,如果你有一个UITableViewCell推动另一个视图控制器的屏幕。如果用户点击该行以关闭键盘,则将识别键盘和推送。我怀疑这是你想要的,但这种方法适用于许多情况。
另外,扩展罗伯特的答案,如果你有一个指向相关的tableview的指针,那么你可以直接比较它的类而不必转换为字符串,并希望Apple不会改变命名法:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
shouldReceiveTouch:(UITouch *)touch
{
if([touch.view class] == tableview.class){
return //YES/NO
}
return //YES/NO
}
请记住,您还必须声明UIGestureRecognizer具有此代码的委托。
TA贡献1851条经验 获得超3个赞
将cancelsTouchesInView识别器设置为false。否则,它会“消耗”触摸本身,并且不会将其传递给表格视图。这就是选择事件永远不会发生的原因。
例如在 swift
let tapOnScreen: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "CheckTheTime")
tapOnScreen.cancelsTouchesInView = false
view.addGestureRecognizer(tapOnScreen)
- 3 回答
- 0 关注
- 743 浏览
添加回答
举报