我在UIView
内放置了一个小UITableViewCell
。
UIView
,我想打开一个弹出窗口。UIView
,我想执行它在UITableView
" didSelectRowAtIndexPath中定义的内容"功能目前发生的事情是,当我点击 on 时,视图会发生两件事:弹出窗口打开," didSelectRowAtIndexPath "功能被触发。
如何确保点击UIView
" didSelectRowAtIndexPath "功能是不是被触发了?
当前实施:
我为自定义UITapGestureRecognizer
课程中的UIView
定义了UITableViewCell
。
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(MyCustomTableViewCell.clickOnHelp(_:)))
myClickAreaUIView.addGestureRecognizer(tapGesture)
答案 0 :(得分:1)
我建议的最佳解决方案是将UIView
更改为UIButton
并使用按钮上的touchUpInside
处理触摸。
这样您就可以实现目标,因为UIButton
会自动阻止触摸事件转发到超级视图
答案 1 :(得分:0)
尝试将内部视图的exclusiveTouch属性设置为true
。
cell.tapView.exclusiveTouch = true
答案 2 :(得分:0)
我建议实施以下UIGestureRecognizerDelegate
的以下方法
func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldReceiveTouch touch: UITouch) -> Bool {
print("in shouldReceiveTouch")
gestureRecognizer.delegate = self
if ([...]){ // touch location is in the UIView
print("touching UIView")
return false // prevent from forwarding touch to superview
} else {
println("touching elsewhere")
return true
}
}
答案 3 :(得分:0)
您应该使用UIGestureRecognizerDelegate
func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool {
return false
}
答案 4 :(得分:0)
为您的UIView
创建一个customClass,假设CustomView
类型为UIView
连接符合 CustomView
类型 tableViewCell 的UIView
个@IBOutlet
在 CustomView 类中调用此函数
override func pointInside(point: CGPoint, withEvent event: UIEvent?) -> Bool {
super.pointInside(point, withEvent: event)
return CGRectContainsPoint(self.bounds, point)
}
这将告诉您用户点按的位置是否包含在UIView
范围内,如果它返回 true ,则会在UIGestureRecognizer
中弹出功能并按照https://stackoverflow.com/a/18606840/6297658,如果 false 执行相反的操作
答案 5 :(得分:-1)
只需在cellForRowAtIndexPath()中编写此代码,即可选择prevent ::
cell.selectionStyle = UITableViewCellSelectionStyle.None