如果在编辑时使用presentViewController,则无法键入UITextField

时间:2013-06-04 16:19:55

标签: objective-c uitextfield resignfirstresponder

我有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状态吗?

我已尝试过MyTextFieldviewWillDisappear,但viewWillAppear从未调用它们。

我也尝试将textFieldDidEndEnding添加到文本字段的委托中,但是,尽管它被调用,但它并没有解决问题。

ConfigureViewController

1 个答案:

答案 0 :(得分:1)

在您展示myAdvancedInfoViewController的情况下,您可以使用[self.view endEditing:YES]来辞职所有第一响应者。

要在此事件发生后将焦点返回到textField,您需要跟踪myAdvancedInfoViewController出现时哪个textField处于活动状态。当myAdvancedInfoViewController被解除时,请为相应的文本字段调用UITextField的becomeFirstResponder方法。