【发布时间】:2016-05-30 21:03:42
【问题描述】:
我遇到了以下问题:
我有两个 TextField,一个具有默认行为,另一个捕获 textFieldDidBeginEditing 方法委托,以呈现具有 PresentationStyle (Custom) 和 TransitionStyle (CrossDissolve) 的 UIViewController。到目前为止一切正常。但是,如果我编辑第一个 textField(并让键盘保持打开状态)然后转到第二个,则键盘是打开的,我无法关闭它(好像第一个 textField 失去了焦点,甚至 textFieldShouldReturn 都没有被调用我按下按钮介绍)。
我试过了:
- TextFieldDidEndEditing(用于调用 resignFirstResponder)
-
在viewWillDissaper方法中(我也叫resignFirstResponder)
func textFieldShouldReturn(textField: UITextField) -> Bool { textField.resignFirstResponder() return true } func textFieldDidEndEditing(textField: UITextField) { print("Resign Last TextField") textField.resignFirstResponder() } func textFieldDidBeginEditing(textField: UITextField) { print("Did Begin editing") if textField == self.departing || textField == self.returning{ textField.resignFirstResponder() self.lastTextFieldSelected = textField let datePickerViewController = Util.getViewController("DatePickerViewController") as! DatePickerViewController datePickerViewController.dateStyle = NSDateFormatterStyle.ShortStyle datePickerViewController.modalTransitionStyle = UIModalTransitionStyle.CrossDissolve datePickerViewController.modalPresentationStyle = UIModalPresentationStyle.Custom datePickerViewController.datePickerDelegate = self self.presentViewController(datePickerViewController, animated: true, completion: nil) } }
编辑: 我尝试使用 self.view.endEditing(true) 什么都没有。
我做了一个小例子(我检查的是 textFieldShouldBeginEditing 允许我关闭键盘。): https://github.com/Abreu0101/TextFieldBug
【问题讨论】:
-
如果您想在 viewWillDisappear 为任何第一响应者关闭键盘,您可以尝试 self.view.endEditing(false) 如果它仍然没有关闭,您可以尝试 self.view.endEditing(true) ,将强制关闭键盘
-
在您描述的情况下,您的所有
textFieldDidBeginEditing代码实际上都在执行吗? -
用于关闭键盘。试试
self.view.endEditing = true -
@matt,是的,它正在执行代码,但首先运行 textFieldDidBeginEditing (在第一步中,松开焦点),然后打开 datePickerViewController (键盘不隐藏)。接下来,委托调用 textFieldDidEndEditing(但没有任何反应)。
-
@Pyro,anhtu,我会尝试那个选项(有时之前尝试过,但不在 viewWillDisapper 中)。
标签: ios swift uiviewcontroller uitextfield uitextfielddelegate