如何禁用为UITableViewCell的某些部分调用DidSelect?

时间:2017-09-01 10:28:51

标签: ios swift uitableview uiview

由于我的单元格可以在可扩展部分展开并且在可扩展部分中包含两个按钮,因此当用户点击这些按钮以改善UX时,我想让DidSelect / DidDeselect不被调用。

按钮放在另一个UIView内的StackView内。

enter image description here

我尝试为stackView和UIView容器禁用userInteraction,但结果是一样的。

你会建议什么时候禁用整个UIView容器(注意这是我的单元格的一部分)来点击DidSelect / DidDeselect?

2 个答案:

答案 0 :(得分:1)

尝试在stackView内实施这两个按钮的操作。

// inside cellForRowAt indexPath
cell?.button1.tag = indexPath.row
cell?.button1.addTarget(self, action: #selector(defineTypeAction(_:)), for: .touchUpInside)

各自的行动:

func defineTypeAction (_ sender: UIButton){
    let alert=UIAlertController(title: kAppName, message: "Select", preferredStyle: UIAlertControllerStyle.alert)
    alert.addAction(UIAlertAction(title: "Ok", style: UIAlertActionStyle.default, handler: {(action:UIAlertAction) in
        sender.setTitle("your title", for: .normal)
        // your custom code
    }));

    present(alert, animated: true, completion: nil)
}

当您点按按钮时,系统会调用其操作方法,而不是tableView委托方法。

答案 1 :(得分:0)

Swift 4.2

完成此操作的基本方法是用另一个轻击手势识别器中断tableview轻击手势。

如果您的单元格中有自定义视图,只需在视图中添加一个手势识别器即可。

@objc func handleTouch(){
    print("Table view interrupted")
}

override func awakeFromNib() {
    super.awakeFromNib()
    let tapGesture = UITapGestureRecognizer(target: self, action: #selector(handleTouch))
    interruptView.addGestureRecognizer(tapGesture)
}

如果您不创建自定义视图,只需对自定义单元格中的任何视图(interruptView)实施这些方法。