当用户点击UITextView的键盘完成按钮时,如何执行操作

时间:2017-06-09 17:36:10

标签: ios swift

我知道有很多类似的问题已经存在,但在查看其中许多问题后,他们涉及UITextField,因此涉及UITextFieldDelegate的textFieldShouldReturn方法。 但是我有一个UITextView,而不是UITextField,我想知道用户何时点击了相关键盘上的完成按钮。

我有一个表格视图,当用户点击其中一行时,表格进入编辑模式,用户可以将文本输入到单元格内的UITextView中。这是一些代码:

包含文字视图的单元格

class ReportTextEntryCell : UITableViewCell
{
    @IBOutlet weak var commentsTextView: UITextView!
}

从cellForRowAt

中调用的单元格的创建
func getTextEntryCell() -> UITableViewCell
{
    let cell = tableView.dequeueReusableCell(withIdentifier: "TextEntryCellID") as? ReportTextEntryCell
    cell!.commentsTextView.delegate           = self
    cell!.commentsTextView.keyboardAppearance = .light
    cell!.commentsTextView.keyboardType       = UIKeyboardType.default
    cell!.commentsTextView.tintColor          = UIColor.black
    cell!.commentsTextView.returnKeyType      = .done
    return cell!
}

出现键盘,用户可以输入文字。

表视图控制器实现UITextViewDelegate并且textViewShouldBeginEditingshouldChangeTextIn都被调用。 但我希望当用户点击键盘上的“完成”按钮时会调用textViewShouldEndEditing,但事实并非如此。

我如何知道用户何时点击完成按钮?

1 个答案:

答案 0 :(得分:1)

您需要继承UITextViewDelegate并为delegate设置textView,然后您可以使用以下内容:

func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
    if text == "\n" {
        // User pressed Done
        textView.resignFirstResponder()
        return false
    }
    return true
}