【问题标题】:Swift resigning TextView from first responderSwift 从第一响应者那里辞去 TextView
【发布时间】:2017-10-17 16:22:31
【问题描述】:

我的 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) 并在相应的ShouldReturn 方法中有textField.resignFirstResponder() + textView.resignFirstResponder()

当我点击返回按钮时,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) {
}

}

【问题讨论】:

  • 您可以为 TextFields 而不是 TextView 使用返回按钮
  • 为它创建一个手势或功能,你会没事的

标签: ios swift uitextfielddelegate uitextviewdelegate resignfirstresponder


【解决方案1】:

退出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 的委托

【讨论】:

【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-17
    • 1970-01-01
    • 2011-04-07
    • 1970-01-01
    • 1970-01-01
    • 2014-02-08
    • 1970-01-01
    相关资源
    最近更新 更多