1

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

我试过了viewWillDisappearviewWillAppear但他们从来没有在ConfigureViewController.

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

-(void)textFieldDidEndEditing:(UITextField *)textField
{
    [MyTextField resignFirstResponder];
}
4

1 回答 1

1

[self.view endEditing:YES]如果您展示 myAdvancedInfoViewController, 您可以使用它来辞职所有第一响应者。

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

于 2013-06-04T16:58:28.867 回答