1. 程式人生 > >iOS開發中彈窗的方式

iOS開發中彈窗的方式

由於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