UIAlertView没有显示

时间:2011-01-10 13:10:41

标签: iphone uialertview

我的一个UIAlertViews有一个小问题。我试图展示它,做一些任务,然后自动解散。这是我目前正在使用的代码:

callingTaxi = [[UIAlertView alloc] initWithTitle:@"" message:@"検索中" delegate:nil cancelButtonTitle:nil otherButtonTitles:nil, nil];
[callingTaxi show];
/* Do some tasks */
[callingTaxi dismissWithClickedButtonIndex:0 animated:YES];
[callingTaxi release];

但是,UIAlertView只显示中途。我可以看到背景变暗,但在任务完成后,警报视图会快速显示,然后再次消失。

有任何想法如何解决这个问题?

5 个答案:

答案 0 :(得分:3)

它确实显示,但你马上解雇它,而不是等待用户做某事,

[callingTaxi dismissWithClickedButtonIndex:0 animated:YES];

iOS没有时间完全呈现它。无论如何,这不是应该如何使用dismissWithClickedButtonIndex。你想在这里实现什么?

编辑:我想你需要为UIAlertView分配一个委托,并让委托处理AlertView内部发生的事情。

答案 1 :(得分:1)

你不应该在显示它的同一个函数中关闭它,通过计时器关闭它,或者作为对另一个事件的反应。

答案 2 :(得分:1)

您不需要代表。问题是您执行的任务必须在后台线程上进行,因此主线程不会单独更新屏幕。

如果您更新代码以使用块和调度队列,一切都会起作用:

callingTaxi = [[UIAlertView alloc] initWithTitle:@"" message:@"検索中" delegate:nil cancelButtonTitle:nil otherButtonTitles:nil, nil];
[callingTaxi show];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, NULL), ^{
    /* Do some tasks */
    dispatch_async(dispatch_get_main_queue(), ^{
        // this code is back on the main thread, where it's safe to mess with the GUI
        [callingTaxi dismissWithClickedButtonIndex:0 animated:YES];
        [callingTaxi release];
    });
});

答案 3 :(得分:0)

您应该为alertview

创建一个方法
- (void) alertView: (UIAlertView *) alertView didDismissWithButtonIndex:(NSInteger)buttonIndex{
// Do stuff
// Or if you have multiple buttons, you could use a switch

[callingTaxi release];

或者你可以Autorelease ..

但是x3ro给出了正确答案,你自己调用方法而不是等待用户按下按钮..

答案 4 :(得分:0)

uialertview被驳回:         [callingTaxi dismissWithClickedButtonIndex:0 animated:YES]; 在用户可以阅读之前。

您打算让最终用户阅读它多长时间?