在網絡請求等異步操作期間,常需展示無按鈕的 UIAlertView 作為加載提示(通常內嵌 UIActivityIndicatorView)。操作完成後,需要程序化關閉該提示框。
UIAlertView 提供了專門的實例方法用於程序化關閉:
- (void)dismissWithClickedButtonIndex:(NSInteger)buttonIndex animated:(BOOL)animated;
// 顯示加載提示
UIAlertView *loadingAlert = [[UIAlertView alloc] initWithTitle:@"取消預訂"
message:@"請稍候..."
delegate:self
cancelButtonTitle:nil
otherButtonTitles:nil];
[loadingAlert show];
// 添加活動指示器
UIActivityIndicatorView *indicator = [[UIActivityIndicatorView alloc]
initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
indicator.center = CGPointMake(loadingAlert.bounds.size.width / 2,
loadingAlert.bounds.size.height - 50);
[indicator startAnimating];
[loadingAlert addSubview:indicator];
// ... 網絡請求完成後關閉提示 ...
[loadingAlert dismissWithClickedButtonIndex:0 animated:YES];
0 即可(cancelButtonIndex 通常為 0)。YES 提供流暢體驗。注意:UIAlertView 自 iOS 9 起已棄用,推薦使用 UIAlertController 搭配 UIActivityIndicatorView 實現同樣效果:
UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"取消預訂"
message:@"請稍候..."
preferredStyle:UIAlertControllerStyleAlert];
UIActivityIndicatorView *indicator = [[UIActivityIndicatorView alloc]
initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
indicator.center = CGPointMake(130.5, 65.5);
[indicator startAnimating];
[alert.view addSubview:indicator];
[self presentViewController:alert animated:YES completion:nil];
// 關閉時
[alert dismissViewControllerAnimated:YES completion:nil];