首先說下UIAlertView和UIActionSheet在iOS9之後蘋果官方就不推薦使用了,而是使用UIAlertController來替代。
有圖為證
所以學習一下UIAlertController的用法也是有必要的。
1.獲取UIAlertController的類對象:
UIAlertController *alertController =[UIAlertController alertControllerWithTitle:@"Success" message:nil preferredStyle:UIAlertControllerStyleAlert];
2.獲取UIAlertAction的類對象:
UIAlertAction *doneAction = [UIAlertAction actionWithTitle:@"Done" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
NSLog(@"123");
}];
3.用UIAlertController的類對象alertController的addAction方法添加UIAlertAction的類對象:
[alertController addAction:doneAction];
4.使用window的根視圖模態出alertController
[[UIApplication sharedApplication].keyWindow.rootViewController presentViewController:alertController animated:YES completion:nil];
如果想用UIActionSheet類似的界面,只需要將第一步中的UIAlertControllerStyleAlert替換成UIAlertControllerStyleActionSheet即可。
如果程序用了這個API,那麼在iOS7上會導致crash,所以需要版本兼容
UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"title" message:@"message" preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *cancel = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil];
UIAlertAction *confirm = [UIAlertAction actionWithTitle:@"確定" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action){
[mainViewDelegate doBackupWithTag:BACKUP_STATISTICS_TAG_CONFIRM];
}];
[alert addAction:cancel];
[alert addAction:confirm];
[self presentViewController:alert animated:YES completion:nil];
可以看到,最大的區別,是UIAlertController不再使用delegate的方式來觸發回調,而是直接傳一個block
delegate和block並沒有本質區別,只是觸發回調的不同方式而已,解決的都是“在未來的某個時間,調用我”的問題。delegate的復用性更好一點,創建一個delegate實例之後,可以把它設置為多個控件的delegate,減少了重復。block的優勢是更加直觀,閱讀起來更容易,因為代碼都在一處,不需要跳來跳去地讀代碼
但是現在既然蘋果官方使用block的頻率越來越高,或許這也代表了一種趨勢