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

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

我使用一个导航栏,所以我可以通过我的意见自由导航。 无论如何,在这些内部视图之一中,我提供了检查用户是否真的想通过警报视图返回到主视图的可能性(只是一对/一对button)。 一旦用户确认他想回去,然后我“手动”popup视图,然后导航到键盘隐藏的主视图。

但是,事情是虚拟键盘行为怪异。 在“内部视图”中,键盘在90%的时间内是可见的(这是正常的,周围有很多UITextFields)。 每当我想让它隐藏起来,我该怎么做才能隐藏它? 我把这样的东西放在“主视图将会出现”:

[self.view endEditing:YES]; 

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

 [[self navigationController] popToRootViewControllerAnimated:YES]; 

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

但后来我决定重新进入相​​同的观点,所以键盘出现,我做了一些花哨的东西。 然后,我决定放弃(用我的button),我再次显示相同的警报视图,我确认我想回到主视图(就像以前一样)。 代码是一样的,但是在主视图中,

 [self.view endEditing:YES]; 

线,什么都不做,什么是最糟糕的,我已经失去了在我的应用程序内部通过代码ANYWHEREclosures键盘的能力。

为什么我知道UIAlertView有什么function? 因为如果我改变我的“中止button”里面的代码:

 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]; 

(也就是说,没有用户的确认,只要按下放弃button,用户只需导航回来),那么当主视图到达“viewWillAppear”函数时,隐藏键盘编码就起作用。 不仅如此,而且一直到我的应用程序会话结束。

我不知道我的问题是否100%清楚,但是如果有人相信他可以向这个神秘主义者透露一些信息,我将很高兴在这里添加一些额外的代码。

问候!

我终于解决了我的问题。 我可以肯定,我可以做得更好,但现在,即使我还不知道“是什么原因导致了上述行为”,我非常高兴。

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

所以一位同事( aleixventa )给了我一个提示:“为什么不延迟一点'回弹'的代码,把它包装在一个” NSTimer结构“中呢?这正是我所做的。 ,现在是这样的:

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

对我的popViewPorTimerselect器有一个小函数:

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

而现在,不pipe键盘被“导航回弹”解散多less次,它总是隐藏起来。 好极了!!

对于额外的奖励,如果有人知道为什么所有这一切发生,这将是一个更受欢迎的信息。

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

那么,我必须完全误导,因为我已经删除了所有我的.m文件中的[self.view endEditing:YES]和/或resignFirstResponder所有痕迹,我发现了两件事情:

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

我原来描述的错误仍然存​​在。

所以,就我所知,当我在实际的UINavigationBar “返回”button(在任何内部视图)中“回退”时,视图popup,如果键盘存在,它将消失。 到现在为止还挺好。

然后在其他一些时候,我需要模拟一个“返回”button。 我这样做:

 [[self navigationController] popViewControllerAnimated:YES]; 

它完美地工作,也就是说,它只是popup,如果键盘存在,它会消失。

BUUUT,如果我写这个“手动返回”动作INSIDE的一些UIAlertView委托我也需要(在我处理两个接受/取消button),这个“手动后退动作”也popup回到“父”视图),但它只在第一次被调用时隐藏键盘。 成功通过此接受/取消UIAlertDelegate函数调用“手动返回”,使“键盘隐藏引擎”在会话的其余部分完全无法使用。

我很失落