iOS:单击TableCellView中的视图

时间:2016-08-24 12:23:09

标签: ios swift uitableview didselectrowatindexpath

我在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)

6 个答案:

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