键盘失去隐藏能力"if I use a UIAlertView"



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

我使用导航栏,这样我可以在视图中自由导航。无论如何,在这些innerviews之一,我提供了检查的可能性,如果用户真的想回到主视图通过一个警告视图(只是一个是/否对按钮)。一旦用户确认他想要返回,那么我就"手动"弹出视图,然后导航到隐藏键盘的主视图。

但是,问题是虚拟键盘的行为很奇怪。在"内部视图"中,90%的时间键盘是可见的(这是正常的,周围有许多uitextfield)。当我想要隐藏它时,我该如何隐藏它呢?我在"main viewWillAppear"中添加如下内容:

[self.view endEditing:YES];

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

[[self navigationController] popToRootViewControllerAnimated:YES]; 

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

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

[self.view endEditing:YES];

行,什么也不做,最糟糕的是,在整个会话中,我失去了在应用程序中的任何地方通过代码关闭键盘的能力。

为什么我知道UIAlertView有事情要做?因为如果我改变"Abort 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];

(也就是说,用户不需要确认,只要按下abort按钮,用户就会返回),然后当主视图到达"viewWillAppear"函数时,隐藏键盘代码就会起作用。不仅是那一次,而且一直到我的应用程序会话结束。

我不知道我的问题是否100%清楚,但如果有人相信他能解开这个谜团,我将非常乐意在这里添加一些额外的代码…

问候!

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

问题是,如果我从UIAlertView委托代码中"弹出"一个视图,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];
}

而现在,无论键盘通过"导航弹出"被关闭多少次,它总是变得隐藏。耶! !

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

我喜欢自己"解决问题"的感觉

嗯,我一定是完全被误导了,因为我已经删除了[self.view endEditing:YES]和/或resignFirstResponder在我所有的。m文件的所有痕迹,我发现了2件事:

1。-他们什么都没做。键盘在需要时自动消失。

2。-我最初描述的bug仍然存在。

所以,据我所知,当我只是"按回"在实际的UINavigationBar"返回"按钮(在任何内部视图),视图,弹出,如果键盘存在,它消失了。到目前为止一切顺利。

然后在其他时候,我需要模拟一个"返回"按钮。我用:

[[self navigationController] popViewControllerAnimated:YES];

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

但是,如果我在一些UIAlertView委托内写这个"手动回"动作,我也需要(在那里我处理两个接受/取消按钮),这个"手动回"动作也会弹出到"父"视图(总是,那是OK的),但它只在第一次调用时隐藏键盘。通过此接受/取消UIAlertDelegate函数连续调用"手动返回",使"键盘隐藏引擎"在会话的其余部分完全不可用。

我迷路了

最新更新