当我按下RETURN键时,为什么我的键盘不会消失?

问题描述:

这是我SecondViewController类:当我按下RETURN键时,为什么我的键盘不会消失?

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个iDevices上继续发生。

N.B:我自愿删除了viewDidLoad和didReceiveMemoryWarning,因为我没有代码进入这些函数。为了

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

进入viewDidLoad()这个工作:

+0

在'textFieldShouldReturn'中也使用'self.view.endEditing(true)'。 –

+0

对不起,我尝试用这行代码,并没有工作... – LiTHiUM2525

+1

你是否已经初始化了textfield的委托给自己?我没有看到你的代码 –

您必须添加几行代码!现在它将您的类分配给textField的委托。很高兴帮助!

+1

更好的是,由于OP使用插座,所以在Interface Builder中设置文本字段的委托。无需代码。 – rmaddy

+0

它依赖于你的开发类型。有些人和我一样,喜欢在代码中使用该代表的代表和方法,而另一些人可能更喜欢拖放样式。代码具有处理以编程方式和通过代码创建的文本字段的优势,这就是我选择它的原因。 –

+0

但非常有针对性的@rmaddy –