在Swift中为UITextView和UILabel添加目标

5
我有一个`UITable`,其中包含多个标签和文本视图。我希望在触发`touchUpInside`事件时调用方法。我尝试使用`targetForAction`方法,但无法指定`touchUpInside`事件。而且,文本视图不可编辑。
总的来说,我希望能够像按钮一样使用`addTarget`方法来操作文本视图和标签,请帮帮我。

对于可点击标签,https://github.com/TTTAttributedLabel/TTTAttributedLabel 是最好的源代码,可以与之一起工作。除了UITextView外,它还有一个在开始编辑时被调用的委托,因此根据逻辑,您可以在委托触发时调用任何方法。 - Nitin Gohel
给它添加一个UITapGestureRecognizertableView:didSelectRowAtIndexPath:不够用吗? - Larme
didSelectRowAtIndexPath: 中,我该如何知道所触摸的对象是否为 UITextView - Prashanth Narasimha
你不能真正地这样做。但是,如果每个单元格只有一个可选择的项目,那么就由你的数据源来检索数据? - Larme
3个回答

13

添加 Gesture 并尝试

let tap = UITapGestureRecognizer(target: self, action: #selector(self.doubleTapped(_:)))
    tap.numberOfTapsRequired = 1
     yourlabel.tag = indexPath.row
    yourlabel.isUserInteractionEnabled = true
    yourlabel.addGestureRecognizer(tap)

调用类似方法

func doubleTapped(_ recognizer: UITapGestureRecognizer) {

        print(recognizer.view!.tag)

}

对于TextView

添加 yourTextView.delegate = self

func textViewDidChange(_ textView: UITextView) {
    //do continue your work
}

您可以在此查看其他类似的方法。


非常顺利的工作!非常感谢你!@Anbu.Karthik - Prashanth Narasimha
你可能还需要像@lou-franco在另一个答案中建议的那样设置yourlabel.userInteractionEnabled = true - vlz
在我的应用程序中它不起作用,我尝试了上面的实现,但仍然没有注册任何手势。请查看我的问题,谢谢。https://stackoverflow.com/q/49092902/3974048 - david

2
  1. 确保 userInteractionEnabled 属性设置为 true。

然后,要么:

  1. 使用 UITapGestureRecognizer

    -或-

  2. 子类化视图并实现 touchesBegan:withEvent: 方法以实现所需的行为。


0
在你的UITableViewController中,你可以添加以下函数。请注意,表格视图单元格并不完全是一个按钮,这就是你不能只使用addTarget的原因。在这个方法中,你将选择当前的表格单元格并相应地进行操作。
class TableView: UITableViewController {

  override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

    tableView.deselectRowAtIndexPath(indexPath, animated: true)

    switch indexPath.row {
    case 1: // Change password
      print("Change password")
    ....// Add your cases 
    default:
      break
    }
  }
}

注意:您也可以在单元格内添加一个UIButton,但我认为这不是一个好的做法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接