【问题标题】:Why isn't my keyboard disappearing when I press the RETURN key?为什么当我按 RETURN 键时我的键盘没有消失?
【发布时间】:2017-02-27 05:49:55
【问题描述】:

这是我的 SecondViewController 类:

class SecondViewController: UIViewController, UITextFieldDelegate {

@IBOutlet weak var txtNewItem: UITextField!
@IBOutlet weak var lblResult: UILabel!
@IBAction func btnAddNewItem(_ sender: Any) {
    let itemsObject = UserDefaults.standard.object(forKey: "items")
    var items:[String]

    if let tmpItem = itemsObject as? [String] {
        if txtNewItem.text == "" {
            //Alert message if empty txtNewItem is ""            
        } else {
            items = tmpItem
            items.append(txtNewItem.text!)
            UserDefaults.standard.set(items, forKey: "items")
        }
    } else {
        items = [txtNewItem.text!]
        UserDefaults.standard.set(items, forKey: "items")
    }
    txtNewItem.text = ""
}

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    self.view.endEditing(true)
}

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

这 2 个函数(touchesBegan 和 textFieldShouldReturn)在我的 FisrtViewController 和许多其他应用程序中完美运行。

我不知道为什么在这种情况下,如果我在任何地方单击键盘都会消失并且工作正常,但是当我按下返回键时,键盘不会消失。

我在 XCode 模拟器和我的 iPhone 7 和 iPad Air 2 上对其进行了测试,这 3 个 iDevice 上的问题仍然存在。

注意:我自愿删除了 viewDidLoad 和 didReceiveMemoryWarning,因为我没有这些函数的代码。

【问题讨论】:

  • textFieldShouldReturn 中也使用self.view.endEditing(true)
  • 对不起,我尝试使用这行代码但不工作...
  • 您是否已将文本字段的委托初始化为自我?我在您的代码中看不到这一点
  • override func viewDidLoad(){ super.viewDidLoad(); textField.delegate = self; }
  • 谢谢Xcoder123

标签: ios swift swift3 keyboard


【解决方案1】:

您必须添加这些代码行:

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

进入viewDidLoad() 以使其正常工作!现在它将您的类分配给 textField 的委托。很高兴它有帮助!

【讨论】:

  • 更好的是,因为 OP 使用的是 outlets,所以在 Interface Builder 中设置文本字段的委托。无需代码。
  • 这取决于您的开发类型。有些人,像我一样,喜欢在代码中同时拥有委托和委托的方法,而其他人可能更喜欢拖放样式。代码具有处理以编程方式和通过代码创建的文本字段的优势,这就是我选择它的原因。
  • 我在代码中做所有事情,所以我明白你在说什么。但是如果一个新的开发人员正在使用storyboards和outlets等,他们似乎也可以在storyboard/xib中连接delegate。但我同意最终由开发人员来选择对他们有用的东西。我真的只是想向 OP 指出这个选项,所以他们认为唯一的选择不是通过代码设置委托。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-25
  • 2015-07-07
相关资源
最近更新 更多