我有一个自定义UITableViewCell,上面有一个Label,需要根据特定条件使其可单击。因此,我在上面添加了一个TapGestureRecognizer。我已经使用了相同的协议和委托。我想传递参数,并在单击此UILabel时执行segue。我可以执行此搜索,但无法检测到它是哪个单元的标签。

我对此并不陌生,已经被困了几个小时。任何帮助,将不胜感激。还请告诉我是否还有另一种更简单的方法来获得相同的结果。

如果这是一个按钮,我可以添加一个目标,但是现在我真的很困。

最佳答案

就像@KrishnaCA在回答中所说的那样,如果您希望整个标签都是可单击的,则最好使用按钮。如果您需要使它看起来与按钮不同,还可以在标签上方放置一个透明按钮(自定义样式,没有图像)。

无论您使用按钮还是标签+点击手势识别器,您仍然需要弄清楚用户点击了哪个indexPath。您可以按照Hamid的建议在按钮/标签中放置标签,但这很脆弱。我更喜欢另一种方式。我为UITableView编写了一个扩展,可让您确定哪个单元格拥有给定的视图:

public extension UITableView {

  /// This method returns the indexPath of the cell that contains the specified view
  /// - parameter view: The view to find.
  /// - returns: The indexPath of the cell containing the view, or nil if it can't be found

  func indexPathForView(_ view: UIView) -> IndexPath? {
    let origin = view.bounds.origin
    let viewOrigin = self.convert(origin, from: view)
    let indexPath = self.indexPathForRow(at: viewOrigin)
    return indexPath
  }
}

如果您将该扩展添加到项目中,则可以使用如下代码。

手势识别器:
@objc func alertClicked(sender: UIGestureRecognizer){
  let view = sender.view
  let indexPath = tableView.indexPathForView(view)
  //Do whatever you need to do with the indexPath
}

或者,对于按钮操作:
@objc func buttonClicked(sender: UIButton) {
  let indexPath = tableView.indexPathForView(sender)
  //Do whatever you need to do with the indexPath
}

关于ios - 如何识别标签单击自定义UITableViewCell-Swift 3,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41522441/

10-14 20:04
查看更多