【问题标题】:How to hide the keyboard when I press return key in a UITextField?当我在 UITextField 中按返回键时如何隐藏键盘?
【发布时间】:2011-04-04 04:32:58
【问题描述】:

单击文本字段会显示键盘。 用户按回车键时如何隐藏?

【问题讨论】:

  • Stack Overflow 的好处是许多问题已经得到解答,尤其是简单的问题。因此,请在提问之前先寻找答案。看,很简单:stackoverflow.com/search?q=iphone+hide+keyboard
  • 这是 UITextfield 的子类,根据文本/字符串条件动态改变 UIReturnKey:github.com/codeinteractiveapps/OBReturnKeyTextField
  • @Felixyz,第一个问题讽刺的是 Android。
  • @IulianOnofrei 我想这可能会逐年变化。但是十年后得到回复真是太好了:) 发现我十年前写了如此尖刻的评论并不是一件好事。 (在我的辩护中,也许当时还不清楚 snark 是一种永远威胁要摧毁互联网所有美好事物的腐烂。)
  • @Felixyz,别担心,我知道这种感觉:D

标签: ios objective-c cocoa-touch delegates


【解决方案1】:

设置UITextField 的委托,并覆盖textFieldShouldReturn 方法,在该方法中只需写以下两行:

[textField resignFirstResponder];
return YES;

就是这样。在编写代码之前,不要忘记设置 UITextField 的委托,并从属性窗口将返回键类型设置为“完成”。(命令 + shift + I)。

【讨论】:

    【解决方案2】:

    首先将您的文件委托给 UITextField

    @interface MYLoginViewController () <UITextFieldDelegate>
    
    @end
    

    然后将此方法添加到您的代码中。

    - (BOOL)textFieldShouldReturn:(UITextField *)textField {        
        [textField resignFirstResponder];
        return YES;
    }
    

    另外加self.textField.delegate = self;

    【讨论】:

    • 很好奇,为什么不需要 ?在这种情况下,您通常会看到警告。
    • 如果您使用 Interface Builder 进行文件委托,则 .h 文件中不需要 ..
    • 在 .h 文件中添加 并在 viewdidload [yourTextField setDelegate:self] 中设置委托;会完成的!
    • @Saurabh 故事板创建的 VC 有什么特别之处?
    【解决方案3】:

    viewDidLoad 声明:

    [yourTextField setDelegate:self];

    然后,包含委托方法的覆盖:

    -(BOOL)textFieldShouldReturn:(UITextField *)textField
    {
        [textField resignFirstResponder];
        return YES;
    }
    

    【讨论】:

    • +1 表示setDelegate: 提醒。肯定是忘记了,以前的代码不能正常工作。
    • 不应该是 textField,而不是传入的 yourTextField 吗?
    • 是声明你的 textField 代表的一种说法
    • 应该在.h 文件中,否则会出现警告!
    【解决方案4】:

    试试这个,

    [textField setDelegate: self];
    

    然后,在 textField 委托方法中

    - (BOOL)textFieldShouldReturn:(UITextField *)textField {
        [textField resignFirstResponder];
        return YES;
    }
    

    【讨论】:

    • 这不是最好的做法。
    • 接口定义中需要UITextFieldDelegate。
    • @AlpAltunel:感谢您的评论,这是 4 年前的事了。
    【解决方案5】:

    在 swift 中这样做:
    首先在你的ViewController 中实现这个UITextFieldDelegate 例如。

    class MyViewController: UIViewController, UITextFieldDelegate {
    ....
    }
    

    现在向TextField 添加一个委托,当您在下面的viewDidLoad 方法或您正在初始化它的地方点击返回时,您希望在其中关闭键盘。 例如。

    override func viewDidLoad() {
    
        super.viewDidLoad()   
        myTextField.delegate = self
    }
    

    现在添加这个方法。

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

    【讨论】:

    • 如果您在 IB 中设置委托,则不需要第二步。
    • 出现(在当前版本的 Swift 中)“textField:”之前应该有一个下划线
    【解决方案6】:

    Swift 中试试这个,

    第 1 步:将代理设置为您的textField

    textField.delegate = self
    

    第 2 步:将此 UITextFieldDelegate 添加到您的类声明下方,

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

    【讨论】:

      【解决方案7】:
      [textField resignFirstResponder];
      

      使用这个

      【讨论】:

        【解决方案8】:

        您可以将“Primary Action Triggered”(右键单击 UITextField)与 IBAction 连接,并且您可以辞去第一响应者(无需委托)。例子 (斯威夫特 4):

        @IBAction func textFieldPrimaryAction(_ sender: UITextField) {
            sender.resignFirstResponder()
            ...
        }
        

        【讨论】:

        • 使用故事板时的首选方式。
        【解决方案9】:

        斯威夫特 4

        在视图控制器field.delegate = self中设置UITextField的委托,然后:

        extension ViewController: UITextFieldDelegate {
            func textFieldShouldReturn(_ textField: UITextField) -> Bool {
                // don't force `endEditing` if you want to be asked for resigning
                // also return real flow value, not strict, like: true / false
                return textField.endEditing(false)
            }
        }
        

        【讨论】:

        • 您将如何处理希望用户通过按回车键“tab”到下一个文本字段,直到最后一个然后它退出?也在 SwiftUI 中。
        • @Learn2Code 做一个经理,收集textfields和chain,最后一个会触发finish函数。
        【解决方案10】:

        好的,我认为对于新手来说事情可能有点混乱。我认为正确的答案是以上所有内容的混合,至少在 Swift4 中是这样。

        要么创建一个扩展,要么使用你想在其中使用它的 ViewController,但请确保实现 UITextFieldDelegate。为了可重用性,我发现使用扩展更容易:

        extension UIViewController : UITextFieldDelegate {
            ...
        }
        

        但替代方法也可以:

        class MyViewController: UIViewController {
            ...
        }
        

        添加方法 textFieldShouldReturn(取决于您之前的选项,在扩展程序或 ViewController 中)

        func textFieldShouldReturn(_ textField: UITextField) -> Bool {
            return textField.endEditing(false)
        }
        

        在您的 viewDidLoad 方法中,将文本字段的委托设置为 self

        @IBOutlet weak var myTextField: UITextField!
        ...
        
        override func viewDidLoad() {
            ..
            myTextField.delegte = self;
            ..
        }
        

        应该就是这样。现在,当您按下return 时,应该会调用textFieldShouldReturn

        【讨论】:

          【解决方案11】:

          定义这个类,然后将你的文本字段设置为使用这个类,这会在自动按下返回时自动执行整个隐藏键盘。

          class TextFieldWithReturn: UITextField, UITextFieldDelegate
          {
          
              required init?(coder aDecoder: NSCoder) 
              {
                  super.init(coder: aDecoder)
                  self.delegate = self
              }
          
              func textFieldShouldReturn(_ textField: UITextField) -> Bool
              {
                  textField.resignFirstResponder()
                  return true
              }
          
          }
          

          那么你需要在故事板中做的就是设置使用类的字段:

          【讨论】:

            【解决方案12】:

            如果您想隐藏特定键盘用途的键盘 [self.view resignFirstResponder]; 如果您想隐藏任何键盘,请使用[self.view endEditing:true];

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2017-05-23
              • 2011-05-03
              • 2014-12-26
              • 1970-01-01
              • 1970-01-01
              • 2012-10-17
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多