辞去第一响应者UITextfield

10

非常抱歉发这篇文章,因为这个问题已经被问了很多次,但是每当我尝试使用其中的一个解决方案时,要么过时了,要么不能与我的代码一起使用(或者可能是我做错了)。

我有5个文本字段和一个文本视图,它们会组成一封电子邮件,并且我正在尝试在完成后最小化键盘,但我不知道该怎么做。

我还尝试使其转到下一个文本字段,直到最后一个,但这不需要做。

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

func textFieldShouldReturn(textField: UITextField) -> Bool {
    if textField == self.text1 {
        self.text2.becomeFirstResponder()
    }
    else if textField == self.text2 {
        self.text3.becomeFirstResponder()
    }
    else if textField == self.text3 {
        self.text4.becomeFirstResponder()
    }
    else if textField == self.text4 {
        self.text5.becomeFirstResponder()
        self.text5.resignFirstResponder();
    }
    
    return true;
}

检查每个字段是否具有一些非零长度的内容并在它们存在时重新分配,这样不是更好吗?您还可以在键盘顶部放置一个“完成”按钮... - Wain
你的设置委托方法是什么?https://dev59.com/nWgu5IYBdhLWcg3wHzsX - Bhadresh Kathiriya
5个回答

13

首先在 .h 文件中添加 UITextFieldDelegate

然后在 .m 文件中进行操作

yourtextfield.delegate = self

然后应用这段代码

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

8

@Peter Boesen:

为了在按下“return”键时最小化键盘...您需要在代码的主要部分发表评论之前完成以下两件事:

  1. 在视图控制器(代码)的顶部,您有 class ViewController: UIViewController - 添加 UITextFieldDelegate。因此,在结尾处应如下所示:

    class ViewController: UIViewController, UITextFieldDelegate

  2. 在同一视图控制器(代码)中的 viewDidLoad 函数中添加 self.textField.delegate = self

然后... 如'Abhinandan Pratap'所提到的那样,将以下代码合并以控制按下“Return”键时键盘的行为:

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

然而,如果您想通过点击屏幕的其他位置来最小化键盘,只需使用“TouchesBegan”即可(前提是您没有使用滚动视图)。
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
    self.view.endEditing(true)
}

如果你在屏幕上使用scrollView,需要结合使用UITapGesture和self.view.endEditing(true)来使得点击屏幕外部关闭键盘。


非常感谢,这个完美地解决了问题!还要感谢你如此详细地解释,它真的很奇妙!:D 我不知道该把正确答案给谁,但既然是“Abhinandan Pratap”先写的代码,我就把它给了他,但还是谢谢你!:) - Peter Boesen
touchesBegan的声明已经改变,因此应该像这样:func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) - FMK

1
有时候使用双重方式会很有帮助(Swift 4):
首先,声明一个代理UITextFieldDelegate,其中包含textFieldShouldReturn方法。
其次,在初始化部分中设置self.textField.delegate = self(通常在viewWillAppear(_ animated: Bool)viewDidLoad中)。
然后填写方法如下:
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    self.resignFirstResponder()
    self.view.endEditing(true)
    //or use on superView of textField
    //superView.endEditing(true)
    return true
}

0

这将会起作用

self.view.endEditing(true)

这段代码应该粘贴在哪里? :) - Peter Boesen
当您需要隐藏键盘时,请使用它,而不是使用resignFirstResponder。 - user3237732

0

首先,您必须确认 UITextFieldDelegate


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接