我的一个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只显示中途。我可以看到背景变暗,但在任务完成后,警报视图会快速显示,然后再次消失。
有任何想法如何解决这个问题?
本
答案 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)
您打算让最终用户阅读它多长时间?