免費開源的iOS開發學習平臺

提醒功能實現:UIAlertController與UIAlertAction

蘋果自iOS8開始,就已經廢棄了之前用于界面提醒的UIAlertView類以及UIActionSheet,取而代之的是UIAlertController以及UIAlertAction,從實際使用情況來看,蘋果把不同類型/樣式提醒的實現方法進行了統一,簡化了有關提醒功能的實現。

UIAlertController的使用

UIAlertController是用于管理和控制某個提醒的類,通過UIAlertController類的對象可以實現提醒樣式的定制。UIAlertController類中有如下常用的方法。

  • UIAlertController實例化方法,通過該方法可以創建一個UIAlertController類的對象
+ (instancetype)alertControllerWithTitle:(nullable NSString *)title message:(nullable NSString *)message preferredStyle:(UIAlertControllerStyle)preferredStyle;
  • 在提醒對象中添加按鈕,每個按鈕都是一個UIAlertAction類的對象
- (void)addAction:(UIAlertAction *)action;
  • 在界面上顯示提醒
- (void)presentViewController:(UIViewController *)viewControllerToPresent animated: (BOOL)flag completion:(void (^ __nullable)(void))completion;

在iOS開發中,提醒主要有兩種樣式,一種是顯示在屏幕中央的,另外一種是顯示在屏幕底部的。在UIAlertController類中,對提醒的樣式進行了統一,使用preferredStyle來區分。

typedef NS_ENUM(NSInteger, UIAlertControllerStyle) {
    UIAlertControllerStyleActionSheet = 0,
    UIAlertControllerStyleAlert
}

UIAlertAction的使用

UIAlertAction是定義提醒中每個按鈕的樣式以及用戶點擊后所執行的操作,每個UIAlertAction對象都需要添加到一個UIAlertController對象上才能生效。當我們需要創建UIAlertAction對象時,可以使用如下的類方法。

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

每個提醒的按鈕樣式也是可以定制的,例如紅色按鈕、加粗字體按鈕等。提醒按鈕的樣式是通過UIAlertActionStyle參數配置的。

typedef NS_ENUM(NSInteger, UIAlertActionStyle) {
    UIAlertActionStyleDefault = 0,
    UIAlertActionStyleCancel,
    UIAlertActionStyleDestructive
} NS_ENUM_AVAILABLE_IOS(8_0);

示例代碼

下方的示例代碼中創建了一個彈出式的提醒,并且包含了兩個按鈕,當點擊每個按鈕后都會執行特定的動作。首先創建一個Single View Application,然后在ViewController.m中添加如下代碼,注意需要在viewDidAppear:方法中實現。

-(void)viewDidAppear:(BOOL)animated{
    UIAlertController* alert = [UIAlertController alertControllerWithTitle:@"提示"                                                                     message:@"是否要訪問99iOS?"                                                                preferredStyle:UIAlertControllerStyleAlert];
    UIAlertAction* defaultAction = [UIAlertAction actionWithTitle:@"YES"
                                                            style:UIAlertActionStyleDefault                                                              handler:^(UIAlertAction * action) {
                                                                NSLog(@"點擊了YES");
                                                            }];
    UIAlertAction* cancelAction = [UIAlertAction actionWithTitle:@"NO"
                                                           style:UIAlertActionStyleCancel                                                     handler:^(UIAlertAction *action) {
                                                               NSLog(@"點擊了NO");
                                                           }];
    [alert addAction:defaultAction];
    [alert addAction:cancelAction];
    [self presentViewController:alert animated:YES completion:nil];
}

當應用啟動后,會彈出一個提醒框,包括兩個按鈕。

當點擊YES時,會打印如下日志,即執行YES按鈕對應的UIAlertAction中設置的代碼。

https://github.com/99ios/7.6


日韩av 中文字幕 1_亚洲第一区在线_亚洲V日韩V精品v无码专区_色鬼久久亚洲AV综合