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];
上面的代碼,會在屏幕上呼出警告框,以下:
初始化方法中的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//警告的風格
}
風格效果以下:
3、UIAlertController其餘屬性和方法
@property (nonatomic, readonly) NSArray<UIAlertAction *> *actions;
獲取全部AlertAction
@property (nonatomic, strong, nullable) UIAlertAction *preferredAction NS_AVAILABLE_IOS(9_0);
iOS9後新增長的屬性,可使某個按鈕更加突出,只能設置已經在actions數組中的AkertAction,會使設置的按鈕更加顯眼,以下:
- (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個";
}];
@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;
獲取警示控件的風格