键盘失去隐藏能力“如果我使用UIAlertView”

时间:2011-07-14 11:16:33

标签: iphone ios keyboard uialertview

我正在编写一些iPad应用程序,并且已经开始出现奇怪的效果。

我使用导航栏,以便我可以在我的视图中自由导航。无论如何,在其中一个内部视图中,我提供了检查用户是否真的想通过警报视图返回主视图的可能性(Just a Yes / no按钮)。 一旦用户确认他想要返回,然后我“手动”弹出视图,然后我导航到键盘隐藏的主视图。

但是,虚拟键盘很奇怪。在“内部视图”内部,键盘在90%的时间内都可见(这是正常的,周围有很多UITextField)。每当我想要隐藏它时,我该怎么做才能隐藏它?我把这样的东西放在“main viewWillAppear”中:

[self.view endEditing:YES];

显然它隐藏了键盘,当我这样做时:

[[self navigationController] popToRootViewControllerAnimated:YES]; 

iPad导航回来,然后键盘消失。没什么大不了的(第一次)。

然后我决定重新进入相​​同的视图,所以键盘出现,我做了一些奇特的东西。然后我决定中止(使用我的按钮),我再次显示相同的警报视图,我确认我想回到主视图(就像之前一样)。代码是相同的,但在主视图中,代码是:

[self.view endEditing:YES];

行,什么都不做,最糟糕的是,我已经失去了在我的应用程序内部代码ANYWHERE关闭键盘的能力,整个会话。

为什么我知道UIAlertView有事可做?因为如果我改变了我的“中止按钮”中的代码:

alertViewQuestionType=ALERT_ABANDON_TEST;
UIAlertView *alert = [[[UIAlertView alloc] initWithTitle:@"" message:NSLocalizedStringFromTable (@"STR_ABANDON_TEST_WARNING", @"ui_strings", @"") delegate:self cancelButtonTitle:NSLocalizedStringFromTable (@"STR_CANCEL", @"ui_strings", @"") otherButtonTitles:nil] autorelease];
[alert addButtonWithTitle:NSLocalizedStringFromTable (@"STR_ABANDON", @"ui_strings", @"")];
[alert show];

到此:

[[self navigationController] popToRootViewControllerAnimated:YES];

(也就是说,没有用户确认,用户只需按下中止按钮就可以导航回来),然后当主视图到达“viewWillAppear”功能时,隐藏键盘代码就可以了。不仅是时间,而是所有时间,直到我的应用程序会话结束。

我不知道我的问题是否100%明确,但如果有人认为他可以为这个错误提供一些启示,我会非常乐意在这里添加一些额外的代码......

问候!

2 个答案:

答案 0 :(得分:5)

我终于解决了我的问题。我更确定自己可以做得更好,但就目前而言,即使我仍然不知道“导致上述行为的原因”,我也非常高兴。

问题在于,如果我“弹回”一个视图,在UIAlertView委托代码中的FROM,iOS认为这是我不应该做的事情,而且它的内部键盘管理代码“变得失控”。这就好像我“太快”弹回,或者没有让iOS关闭它需要关闭的任何键盘数据结构。

所以一位同事(aleixventa)给了我一个提示:“为什么不延迟一些'popback'代码,将其包含在”NSTimer结构中?“。这正是我做了什么。我的'回弹'手动代码现在是这样的:

NSTimer* testTimer = [NSTimer scheduledTimerWithTimeInterval:.05 target:self selector:@selector(popViewPorTimer) userInfo:nil repeats: NO];

我的popViewPorTimer选择器的功能很小:

-(void) popViewPorTimer
{
    [[self navigationController] popViewControllerAnimated:YES];
}

现在,无论键盘通过“导航弹回”被解除多少次,它总是被隐藏起来。 YAY !!

要获得额外奖励,如果有人知道为什么会发生这一切,那么这将是一个非常受欢迎的信息。

当我自己“解决问题”时,我喜欢:)

答案 1 :(得分:1)

好吧,我一定是被误导了,因为我删除了所有.m文件中[self.view endEditing:YES]和/或resignFirstResponder的所有痕迹,我发现了两件事:

1.-他们没有做任何事情。键盘自动在需要时消失。

2.-我最初描述的错误仍在那里。

所以,据我所知,当我在实际的UINavigationBar“后退”按钮(在任何内部视图中)“按回”时,视图会弹回,如果键盘存在,则消失。到目前为止一切都很好。

然后其他一些时候,我需要模拟一个“后退”按钮。我这样做:

[[self navigationController] popViewControllerAnimated:YES];

它完美无瑕地运行,也就是说,它只是弹出,如果键盘存在,它就会消失。

BUUUT,如果我写这个“手动返回”动作INSIDE一些UIAlertView代表我也需要(我处理两个接受/取消按钮),这个“手动后退动作”也会弹回“父级” “查看(总是,没关系),但它只在第一次调用时才隐藏键盘。通过此接受/取消UIAlertDelegate功能成功调用“手动返回”,使“键盘隐藏引擎”在剩余的会话中完全无法使用。

我很丢失。