iOS開發中彈窗的方式
阿新 • • 發佈:2019-01-08
由於iOS系統的不斷更新, 所以導致很多就方法慢慢的被淘汰,但是在一些舊的專案中仍然在使用, 這就到時很多初學者容易對新舊方法混淆不清, 下面介紹一下關於彈窗的新舊不同方式及其使用方法, 廢話不多說, 上程式碼
// ViewController.m // 彈窗的四中種形式 // // Created by Wangjunling on 16/3/9. // Copyright © 2016年 Wangjunling. All rights reserved. // #import "ViewController.h" @interface ViewController () <UIAlertViewDelegate, UIActionSheetDelegate> @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. } - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { //[self test1];// iOS8之前螢幕中間彈窗 // [self test2];// iOS8之前螢幕底部彈窗 // [self test3];// iOS8之後螢幕中間彈窗 [self test4];// iOS8之後螢幕底部彈窗 } #pragma mark 方法1 iOS8之前的彈窗方式,在螢幕中間彈窗 - (void)test1{ // 1.建立一箇中間彈框,有“取消”和“確定按鈕”,設定代理為當前控制器,由控制器監聽點選了“取消”還是“確定”按鈕 UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示" message:@"點選了螢幕" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"確定", nil]; //2顯示 [alert show]; } #pragma mark UIAlertViewDelegate 代理方法, 監聽方法1中出現的彈框中的按鈕點選,控制器來監聽點選了取消還是確定按鈕 - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { // 3處理點選事件 if (buttonIndex == 0) { NSLog(@"點選了取消按鈕"); } else { NSLog(@"點選了確定按鈕"); } } #pragma mark 方法2 iOS8之前的彈窗方式,在螢幕底部彈窗 - (void)test2 { //1建立底部彈窗 UIActionSheet *sheet = [[UIActionSheet alloc] initWithTitle:@"點選了螢幕" delegate:self cancelButtonTitle:@"取消" destructiveButtonTitle:@"確認" otherButtonTitles:nil, nil]; //2顯示 [sheet showInView:self.view]; } #pragma mark 實現actionsheet 代理 - (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex { //3處理點選事件 if (buttonIndex == 0) { NSLog(@"點選了取消按鈕"); } else { NSLog(@"點選了確定按鈕"); } } #pragma mark 方法3 用在IOS8以後,沒有代理。點選按鈕時要執行的操作放在了block中,因此不需要設定代理 - (void)test3{ // 1.建立彈框控制器, UIAlertControllerStyleAlert這個樣式代表彈框顯示在螢幕中央 UIAlertController *alertVc = [UIAlertController alertControllerWithTitle:@"提示" message:@"點選了螢幕" preferredStyle:UIAlertControllerStyleAlert]; // 2.新增取消按鈕,block中存放點選了“取消”按鈕要執行的操作 UIAlertAction *cancle = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) { NSLog(@"點選了取消按鈕"); }]; UIAlertAction *confirm = [UIAlertAction actionWithTitle:@"確定" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) { NSLog(@"點選了確定按鈕"); }]; // 3.將“取消”和“確定”按鈕加入到彈框控制器中 [alertVc addAction:cancle]; [alertVc addAction:confirm]; // 4.控制器 展示彈框控制元件,完成時不做操作 [self presentViewController:alertVc animated:YES completion:^{ nil; }]; } #pragma mark 方法4用在IOS8以後,彈框的樣式變為“UIAlertControllerStyleActionSheet”, 彈框出現在螢幕底部 - (void)test4 { UIAlertController *alertVc = [UIAlertController alertControllerWithTitle:@"提示" message:@"點選了螢幕" preferredStyle:UIAlertControllerStyleActionSheet]; UIAlertAction *cancle = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) { NSLog(@"點選了取消"); }]; UIAlertAction *confirm = [UIAlertAction actionWithTitle:@"確定" style:UIAlertActionStyleDestructive handler:^(UIAlertAction *action) { NSLog(@"點選了確定"); }]; /*關於UIAlertActionStyle有三種樣式 UIAlertActionStyleDefault , 預設樣式 UIAlertActionStyleCancel, 取消 UIAlertActionStyleDestructive, 有毀滅性的操作是使用, 呈現紅色 */ [alertVc addAction:cancle]; [alertVc addAction:confirm]; [self presentViewController:alertVc animated:YES completion:^{ nil; }]; } @end