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

时间:2015-08-07 21:12:06

标签: ios iphone swift cocoa-touch

我想在用户输入时摆脱键盘的“返回”功能,因此没有换行,所以我希望“返回”键能够充当'完成'所以它会隐藏键盘。

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

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

{{1}}

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

4 个答案:

答案 0 :(得分:88)

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

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

<强>更新 如上所述,您肯定可以使用相同的方法将返回键设置为&#34; Done&#34;。但是,当用户点击返回键时,UITextView不提供回调。作为一种变通方法,您可以尝试处理textView(textView:UITextView,shouldChangeTextInRange范围:NSRange,replacementText text:String)委托调用,并在检测到新行字符的输入时关闭键盘:

{{1}}

答案 1 :(得分: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
}

答案 2 :(得分: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
        }
    }
}

答案 3 :(得分: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