我有一个ConfigureViewController
包含一些 UIButtons 和一个UITextField * MyTextField
. 每个按钮在按下时都会弹出一个对话框样式的视图控制器,使用presentViewController:animated:completion:
. 但是,如果我在编辑文本字段时点击其中一个按钮,当我关闭对话框并返回原始屏幕时,我无法将焦点返回到文本字段或在文本字段中输入。
这是点击按钮时调用的方法。
-(void)AdvancedInfoButtonPressed :(id)sender
{
AdvancedInfoPopViewController *myAdvancedInfoViewController = [[AdvancedInfoPopViewController alloc] init];
[myAdvancedInfoViewController setDelegateAndDevice :self :Current_Device];
myAdvancedInfoViewController.modalPresentationStyle = UIModalPresentationFormSheet;
[self presentViewController :myAdvancedInfoViewController animated :NO completion :nil];
}
在没有明确从 中移除焦点的情况下MyTextField
,呈现AdvancedInfoViewController
确实会自动关闭键盘。
我怀疑问题在于它MyTextField
仍然认为它有焦点(即使键盘和闪烁的光标已经消失),因此不允许自己再次成为第一响应者。沿着这些思路,我发现如果我[MyTextField resignFirstResponder]
在呈现对话框视图控制器之前添加,问题就会消失。
但是,这似乎不是一个很好的解决方案,因为这意味着必须记住将此文本字段(或任何其他文本字段)作为多个地方的第一响应者(导致代码难以维护)。我的问题是:是否有任何事件可以挂钩,或者何时ConfigureViewController
将被部分遮挡AdvancedInfoViewController
(或何时AdvancedInfoViewController
被解除并将焦点返回到ConfigureViewController
),在其中我可以添加一些逻辑来清理MyTextField
的 firstResponder 状态?
我试过了viewWillDisappear
,viewWillAppear
但他们从来没有在ConfigureViewController
.
我也尝试将 textFieldDidEndEnding 添加到文本字段的委托中,但尽管它被调用,但它并没有解决问题。
-(void)textFieldDidEndEditing:(UITextField *)textField
{
[MyTextField resignFirstResponder];
}