在UITextView中将swift中的“返回”按钮功能更改为“完成”

问题描述 投票:32回答:4

我想在用户输入时摆脱键盘的“返回”功能,所以没有换行,所以我希望'return'键可以作为'Done'使用,这样就可以隐藏键盘。

我正在使用可编辑的UITextView,因此用户可以输入他们的帖子,并将其发布到主时间轴,但由于我有固定单元格,我不希望用户能够按“返回”他们的帖子将超出时间表的范围。

我发现这适用于UITextField,但不适用于UITextView:

func textFieldShouldReturn(textField: UITextField!) -> Bool {
    textField.resignFirstResponder()  //if desired
    return true
}

所以我只是想知道是否有办法在UITextView中执行此操作,或者至少能够在按下返回时隐藏键盘,而不是创建新行。

ios iphone swift cocoa-touch
4个回答
91
投票

您可以设置文本字段的返回键类型:

textField.returnKeyType = UIReturnKeyType.Done

更新您肯定可以使用相同的方法将返回键设置为“完成”,如上所述。但是,当用户点击返回键时,UITextView不提供回调。作为解决方法,您可以尝试处理textView(textView:UITextView,shouldChangeTextInRange范围:NSRange,replacementText text:String)委托调用,并在检测到新行字符的输入时关闭键盘:

func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool {
    if (text == "\n") {
        textView.resignFirstResponder()
    }
    return true
}

4
投票

我已经尝试了很多代码,最后这对我在Swift 3.0中工作最新[2019年4月]这是使用UITextFields实现的

“ViewController”类应继承“UITextFieldDelegate”以使此代码正常工作。

class ViewController: UIViewController,UITextFieldDelegate  

添加带有正确标记号的文本字段,此标记号用于根据分配给它的增量标记号将控件带到适当的文本字段。

override func viewDidLoad() {

    userNameTextField.delegate = self
    userNameTextField.tag = 0
    userNameTextField.returnKeyType = .next
    passwordTextField.delegate = self
    passwordTextField.tag = 1
    passwordTextField.returnKeyType = .go
}

在上面的代码中,“returnKeyType = UIReturnKeyType.next”将使键盘返回键显示为“Next”,您还可以根据应用程序更改值等其他选项“Join / Go”等。

这个“textFieldShouldReturn”是一个UITextFieldDelegate控制的方法,在这里我们有基于Tag值增量的下一个字段选择。

func textFieldShouldReturn(_ textField: UITextField) -> Bool
{
    if let nextField = textField.superview?.viewWithTag(textField.tag + 1) as? UITextField {
        nextField.becomeFirstResponder()
    } else {
        textField.resignFirstResponder()
        return true;
    }
    return false
}

0
投票

在Swift工作4

在viewDidLoad()中添加它。

textField.returnKeyType = UIReturnKeyType.Done

在任何你喜欢的地方添加。

extension UITextView: UITextViewDelegate {
    public func textViewDidChange(_ textView: UITextView) {
        if text.last == "\n" { //Check if last char is newline
            text.removeLast() //Remove newline
            textView.resignFirstResponder() //Dismiss keyboard
        }
    }
}

0
投票

如果您正在使用故事板或xib,则可以在Interface Builder中将UITextView's返回按钮更改为“完成”(或其他各种选项),而无需任何设置代码。只需在“属性”检查器中查找此选项:

Return Key option in Interface Builder

从那里,您只需将其与其他人已在此处提供的UITextViewDelegate代码配对。

Swift v5:

extension ExampleViewController: UITextViewDelegate {

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

然后,在你的viewDidLoad()方法:

exampleTextView.delegate = self

© www.soinside.com 2019 - 2024. All rights reserved.