我有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
被解散并且焦点返回到{{1}时),我是否可以勾选任何事件?我可以在其中添加一些逻辑来清理ConfigureViewController
的firstResponder状态吗?
我已尝试过MyTextField
和viewWillDisappear
,但viewWillAppear
从未调用它们。
我也尝试将textFieldDidEndEnding添加到文本字段的委托中,但是,尽管它被调用,但它并没有解决问题。
ConfigureViewController
答案 0 :(得分:1)
在您展示myAdvancedInfoViewController的情况下,您可以使用[self.view endEditing:YES]
来辞职所有第一响应者。
要在此事件发生后将焦点返回到textField,您需要跟踪myAdvancedInfoViewController出现时哪个textField处于活动状态。当myAdvancedInfoViewController被解除时,请为相应的文本字段调用UITextField的becomeFirstResponder
方法。