Swift从第一响应者处退出TextView

时间:2017-05-18 02:53:42

标签: ios swift uitextfielddelegate uitextviewdelegate resignfirstresponder

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

我希望在单击返回按钮时将TextField或TextView从第一个响应者中撤消。 我在相应的func textFieldShouldReturn(_ textField: UITextField) -> Bool func textFieldDidEndEditing(_ textField: UITextField) func textViewShouldReturn(_ textView: UITextView) -> Bool func 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) {
}

}

2 个答案:

答案 0 :(得分:4)

有一种技巧可以让textview退出。

vip

确保将ViewController设置为textview的委托

答案 1 :(得分:1)

更好的方法是在textview键盘上添加工具栏以重新设置键盘,因为用户可能想要添加新行,因此该功能应该保持不变。

How to add done button on keyboard on top of keyboard in IOS?