当按下返回键时如何隐藏键盘 - Swift

13

试图在按下回车键时隐藏iOS键盘,但实际上它会停止并给出图片中看到的错误。这是我正在使用的代码:

@IBOutlet weak var scoreText: UITextField!

func textFieldShouldReturn(_ scoreText: UITextField) -> Bool {
    self.view.endEditing(true)
    return false
}

enter image description here

3个回答

36

您的问题是您没有委托一个textField以使用该方法。首先,您的类必须包括UITextFieldDelegate协议:

class yourClass: UIViewController, UITextFieldDelegate { ... }

viewDidLoad() 方法中,也要添加这个:

scoreText.delegate = self

然后你必须更改这个:

func textFieldShouldReturn(_ scoreText: UITextField) -> Bool {
    self.view.endEditing(true)
    return false
}

到这个:

func textFieldShouldReturn(_ scoreText: UITextField) -> Bool {
    self.view.endEditing(true)
    return true
}

最终代码:

class yourClass: UIViewController, UITextFieldDelegate {

    @IBOutlet weak var scoreText: UITextField!

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

    func textFieldShouldReturn(_ scoreText: UITextField) -> Bool {
        self.view.endEditing()
        return true
    }
}
如果这个方法不能正常工作,问题不在于 textFieldShouldReturn() 函数。请检查你的输出口连接是否正确。

遇到了这个问题:http://i.imgur.com/PAWVdrb.png 顺便问一下,为什么我需要委托TextField而不是标签、按钮等? - user3349374
@stevetheipad 1 - 因为 textFieldShouldReturn 函数包含在 UITextFieldDelegate 中; 2 - 尝试添加你的参数: **self.view.endEditing(true)**,我可能在我的答案中漏掉了这个。 - Mr. Xcoder
在AppDelegate上加了(true),但仍然显示Thread 1: signal SIGABRT。 - user3349374
1
那么问题不在这个类上! - Mr. Xcoder
删除了那个文本框,重新创建后现在它可以工作了。奇怪!感谢您的帮助。 - user3349374
太棒了!:) - Booharin

5

试试这个

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

没有运气,问题依旧。 - user3349374
@stevetheipad,你是否将你的视图控制器设置为遵循UITextField代理? - Mochi
抱歉,您是指IBOutlet吗?如果是的话,是的,我为UITextField添加了一个。 - user3349374
@stevetheipad在应用代理中崩溃,通常意味着你有未连接的残留outlets。请检查你storyboard中的“引用输出”,如果可能的话,请在控制台中显示bug而不仅仅是代码。 - Mochi

1
在 Swift 4 或 5 中,您可以像这样使用:

  1. create a project
  2. add UITextField & connect to ViewController
  3. implement UITextFieldDelegate to ViewController
  4. Initialize the UITextField delegate
  5. Add textFieldShouldReturn method in ViewController
  6. Here is full code

    class ViewController: UIViewController,UITextFieldDelegate {
    
     //Connect to text field
     @IBOutlet weak var scoreText: UITextField!
    
     override func viewDidLoad() {
       super.viewDidLoad()
    
        //must initialize delegate
        scoreText.delegate = self
      }
    
     //add method
     func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        textField.resignFirstResponder()
        return true
     }  
    
    }
    

比其他人更好,谢谢。 - alireza daryani

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