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

Bru*_*las 40 iphone cocoa-touch ios swift

我想在用户输入时摆脱键盘的"返回"功能,所以没有换行,所以我希望"返回"键能够用作"完成",这样它就会隐藏键盘.

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

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

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

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

uto*_*ria 105

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

textField.returnKeyType = UIReturnKeyType.Done
Run Code Online (Sandbox Code Playgroud)

更新 您肯定可以使用相同的方法将返回键设置为"完成",如上所述.但是,当用户点击返回键时,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
}
Run Code Online (Sandbox Code Playgroud)

  • 较小的调整:如果输入了新行,并且不希望存储新行,则返回_false_ (4认同)

BHU*_*MAR 5

我尝试了许多代码,最终在Swift 3.0中为我工作了。最新的[April 2019]这是使用UITextFields实现的

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

class ViewController: UIViewController,UITextFieldDelegate  
Run Code Online (Sandbox Code Playgroud)

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

override func viewDidLoad() {

    userNameTextField.delegate = self
    userNameTextField.tag = 0
    userNameTextField.returnKeyType = .next
    passwordTextField.delegate = self
    passwordTextField.tag = 1
    passwordTextField.returnKeyType = .go
}
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,“ 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
}
Run Code Online (Sandbox Code Playgroud)


The*_*eil 5

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

Interface Builder 中的 Return Key 选项

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

斯威夫特 v5:

extension ExampleViewController: UITextViewDelegate {

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

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

exampleTextView.delegate = self