我知道有很多类似的问题已经存在,但在查看其中许多问题后,他们涉及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
并且textViewShouldBeginEditing
和shouldChangeTextIn
都被调用。
但我希望当用户点击键盘上的“完成”按钮时会调用textViewShouldEndEditing
,但事实并非如此。
我如何知道用户何时点击完成按钮?
答案 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
}