我正在使用带有“请等待”的UIAlertView和UIActivityIndicatorView。我用
显示它{
...
[self performSelectorInBackground:@selector(sh) withObject:nil];
//i've tried also
//[NSThread detachNewThreadSelector:@selector(showWaiting) toTarget:self withObject:nil];
...
}
- (void)showWaiting {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
[waitingAlert show];
[pool drain];
}
出现警报时,屏幕变暗并变为非活动状态。当有时间解除警报时,我会这样做
[waitingAlert dismissWithClickedButtonIndex:0 animated:NO];
此警报消失后,但有时(机会约为5%)屏幕仍然像以前一样变暗和不活动。 有人遇到过这样的问题吗? 谢谢!
答案 0 :(得分:3)
这不是您正在寻找的答案......但这是“正确”的答案,从长远来看会为您节省一些时间:
你在滥用UIAlertView。它不应该用于进度指示器和“请等待”对话框。它被设计为被用户按下按钮而被解雇 - UIAlertView永远不应该自行消失(更正:实际上,它可以; Apple的API支持解雇它。但是这样的事情应该非常小心地使用。)
如果您继续以这种方式滥用UIAlertView,请勿在应用商店提交期间拒绝您的应用时感到惊讶,然后您必须以其他方式重做。
请参阅我对这个问题的回答:
Multiple AlertViews - Remove the alertview that is behind another alertview
答案 1 :(得分:1)
由于occulus状态避免像这样使用UIAlertView,
我推荐MBProgressHUD,它非常易于使用,看起来很棒,专为此目的而设计。
答案 2 :(得分:0)
您必须在NSAutoreleasePool
之外创建,显示和发布提醒。例如,您在后台拨打电话:
...
[NSThread detachNewThreadSelector:@selector(showWaiting) toTarget:self withObject:nil];
...
这个电话有一个自动释放池:
- (void)showWaiting {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
[self performSelectorInMainThread:@selector(showMyAlert) withObject:nil waitUntilDone:NO];
//[waitingAlert show];
[pool drain];
}
然后你必须使用主线程显示警告。
- (void)showMyAlert {
UIAlertView * myAlert = [[UIAlertView alloc] initWith...];
[myAlert show];
[myAlert release];
}
如果您尝试在自动释放池中显示警报并且已经耗尽,则警报会消失。
我希望这有帮助!