我的ViewController中有一个TextField和一个TextView。 ViewController遵循UITextFieldDelegate和UITextViewDelegate及其委托方法。

单击返回按钮时,我想从第一响应者中退出TextField或TextView。
我实现了func textFieldShouldReturn(_ textField: UITextField) -> Boolfunc textFieldDidEndEditing(_ textField: UITextField)func textViewShouldReturn(_ textView: UITextView) -> Boolfunc textViewDidEndEditing(_ textView: UITextView),并在相应的textField.resignFirstResponder() + textView.resignFirstResponder()方法中添加了ShouldReturn

当我单击返回按钮时,TextField成功退出,并且键盘隐藏起来。对于TextView,返回按钮只是向TextView添加新行; textViewShouldReturn(_:)根本不会被调用。

有人可以解释textFieldShouldReturn(_:)textViewShouldReturn(_:)之间的区别,我如何辞去TextView作为第一响应者的职责?

谢谢

import UIKit

class DetailViewController: UIViewController, UITextViewDelegate, UITextFieldDelegate {

@IBOutlet weak var date: UITextField!
@IBOutlet weak var noteText: UITextView!

override func viewDidLoad() {
    super.viewDidLoad()

    date.delegate = self
    noteText.delegate = self
}


//MARK: UITextViewDelegate

func textViewShouldEndEditing(_ textView: UITextView) -> Bool {
    // Hide the keyboard.
    textView.resignFirstResponder()
    return true
}


func textViewDidEndEditing(_ textView: UITextView) {
}

func textFieldShouldEndEditing(_ textField: UITextField) -> Bool {
    // Hide the keyboard.
    textField.resignFirstResponder()
    return true
}


func textFieldDidEndEditing(_ textField: UITextField) {
}

}

最佳答案

有一个技巧可以退出textview。

extension ViewController: UITextViewDelegate {
    func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {

        if text == "\n" {
            textView.resignFirstResponder()
            return false
        }
        return true
    }
}

确保将ViewController设置为textview的委托

关于ios - 快速从第一响应者辞职TextView,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44037832/

10-12 13:37