iOS8統一的系統提示控件——UIAlertController

iOS8統一的系統提示控件——UIAlertController數組

1、引言atom

        相信在iOS開發中,你們對UIAlertView和UIActionSheet必定不陌生,這兩個控件在UI設計中發揮了很大的做用。然而若是你用過,你會發現這兩個控件的設計思路有些繁瑣,經過建立設置代理來進行界面的交互,將代碼邏輯分割了,而且很容易造成冗餘代碼。在iOS8以後,系統吸引了UIAlertController這個類,整理了UIAlertView和UIActionSheet這兩個控件,在iOS中,若是你扔使用UIAlertView和UIActionSheet,系統只是會提示你使用新的方法,iOS9中,這兩個類被徹底棄用,但這並不說明舊的代碼將不能使用,舊的代碼依然能夠工做很好,可是會存在隱患,UIAlertController,不只系統推薦,使用更加方便,結構也更加合理,做爲開發者,使用新的警示控件,咱們何樂而不爲呢。這裏有舊的代碼的使用方法:.net

UIAlertView使用:http://my.oschina.net/u/2340880/blog/408873設計

UIActionSheet使用:http://my.oschina.net/u/2340880/blog/409907代理

2、UIAlertController的使用blog

        從這個類的名字咱們就能夠看出,對於警示控件,設計的思路再也不是View而是Controller。經過present和push進行呼出,而不是之前的show方法。另外一個機制改變的地方是,其中按鈕的觸發方法再也不經過代理處理,而是將按鈕封裝成了類:UIAlertAction。詳細方法及使用以下:開發

 UIAlertController * con = [UIAlertController alertControllerWithTitle:@"新的" message:@"看看樣子" preferredStyle:UIAlertControllerStyleAlert];get

    [con addAction:[UIAlertAction actionWithTitle:@"仔細看" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {it

       //按鈕觸發的方法io

    }]];

     [self presentViewController:con animated:YES completion:nil];

上面的代碼,會在屏幕上呼出警告框,以下:

194732_LhTJ_2340880.png

初始化方法中的preferref參數是一個枚舉,決定是提示框或者抽屜列表:

typedef NS_ENUM(NSInteger, UIAlertControllerStyle) {

    UIAlertControllerStyleActionSheet = 0,//抽屜

    UIAlertControllerStyleAlert//警告框

}

上面的addAction方法添加了一個封裝了方法的按鈕,UIAlertAction類的構造十分簡單,以下:

//初始化方法

+ (instancetype)actionWithTitle:(nullable NSString *)title style:(UIAlertActionStyle)style handler:(void (^ __nullable)(UIAlertAction *action))handler;

//獲取標題

@property (nullable, nonatomic, readonly) NSString *title;

//獲取風格

@property (nonatomic, readonly) UIAlertActionStyle style;

//設置是否有效

@property (nonatomic, getter=isEnabled) BOOL enabled;

AlertAction的風格是以下的枚舉:

typedef NS_ENUM(NSInteger, UIAlertActionStyle) {

    UIAlertActionStyleDefault = 0,//默認的風格

    UIAlertActionStyleCancel,//取消按鈕的風格

    UIAlertActionStyleDestructive//警告的風格

}

風格效果以下:

195742_Kaxz_2340880.png

3、UIAlertController其餘屬性和方法

@property (nonatomic, readonly) NSArray<UIAlertAction *> *actions;

獲取全部AlertAction

 

@property (nonatomic, strong, nullable) UIAlertAction *preferredAction NS_AVAILABLE_IOS(9_0);

iOS9後新增長的屬性,可使某個按鈕更加突出,只能設置已經在actions數組中的AkertAction,會使設置的按鈕更加顯眼,以下:

200351_DeEZ_2340880.png     

 

- (void)addTextFieldWithConfigurationHandler:(void (^ __nullable)(UITextField *textField))configurationHandler;

添加一個textField,之前的相關控件,雖然也能夠添加textField,可是定製化能力很是差,這個新的方法中有一個configurationHandler代碼塊,能夠將textField的相關設置代碼放入這個代碼塊中,而且這個方法添加的textField個數再也不限制於2個:

 [con addTextFieldWithConfigurationHandler:^(UITextField * _Nonnull textField) {

        textField.placeholder=@"第1個";

    }];

    [con addTextFieldWithConfigurationHandler:^(UITextField * _Nonnull textField) {

        textField.placeholder=@"第2個";

    }];

    [con addTextFieldWithConfigurationHandler:^(UITextField * _Nonnull textField) {

        textField.placeholder=@"第3個";

    }];

201411_W9NY_2340880.png

 

@property (nullable, nonatomic, readonly) NSArray<UITextField *> *textFields;

獲取全部textField的數組

 

@property (nullable, nonatomic, copy) NSString *title;

設置警示控件的標題

 

 

@property (nullable, nonatomic, copy) NSString *message;

設置警示控件的信息

 

 

@property (nonatomic, readonly) UIAlertControllerStyle preferredStyle;

獲取警示控件的風格

相關文章
相關標籤/搜索