如何在输入背景时花时间完全解雇UIAlertView?

时间:2011-01-11 17:24:24

标签: iphone objective-c cocoa-touch uialertview multitasking

我弹出UIAlertView来询问用户是否真的要打开网址。如果他们选择“是”,我的应用会立即打开该网址并发送到后台。当用户重新打开我的应用程序(具有多任务处理)时,警报视图并未完全消失并处于半透明状态。据推测,在多任务处理中使用的屏幕截图是在警报视图完全消失之前拍摄的,但在它开始逐渐消失之后。

如何为我的应用程序提供完全取消警报视图所需的额外秒数?看起来我应该在-applicationDidEnterBackground:中做一些事情或者在视图控制器中听取等效通知,但我不确定最好的方法。

3 个答案:

答案 0 :(得分:3)

你应该致电- (void)dismissWithClickedButtonIndex:(NSInteger)buttonIndex animated:(BOOL)animated。在iOS 4中,当应用移动到后台时,警报视图不会自动被忽略。

答案 1 :(得分:0)

我听说过这种情况 - 背景屏幕截图发生在触发背景的动画中间。

您可以使用[self performSelector: withObject: afterDelay:]在解除警报和应用程序背景之间插入一些时间。 withDelay是一个浮点数并接受几分之一秒,所以你可以很好地微调它。

答案 2 :(得分:0)

以防万一其他人正在寻找适合我的代码,这里是:

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    if (buttonIndex == 1) { // Ok button
        // URL to be opened
        NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"tel:%@", [self phoneNumber]]];

        [alertView dismissWithClickedButtonIndex:buttonIndex animated:YES];
        [[UIApplication sharedApplication] openURL:url];
    }
}