UIActionSheet 操作表

前言

  • Objective-C

    1
    2
    3
    NS_CLASS_DEPRECATED_IOS(2_0, 8_3, "UIActionSheet is deprecated. Use UIAlertController with a 
    preferredStyle of UIAlertControllerStyleActionSheet instead") __TVOS_PROHIBITED
    @interface UIActionSheet : UIView
  • Swift

    1
    2
    3
    @available(iOS, introduced=2.0, deprecated=8.3, message="UIActionSheet is deprecated. Use 
    UIAlertController with a preferredStyle of UIAlertControllerStyleActionSheet instead")
    public class UIActionSheet : UIView
  • 按钮的 index 按照 otherButton、cancelButton、addButtonWith 的顺序依次类推,起始值为 0。

  • ActionSheet 也可以设置 title 属性作为提示信息,一般不设置 title 看着会舒服一些。

  • ActionSheet 显示的时候调用的是 showInView。如果是在工具条或标签条中需要使用专门提供的其它方法。

    • 工具条的情况下 [actionSheet showFromToolbar:self.navigationController.toolbar];
    • 标签条的情况下 [actionSheet showFromTabBar:self.tabBar];

1、UIActionSheet 的创建

  • Objective-C

    • 创建时直接添加按钮等信息

      1
      2
      3
      4
      5
      6
      7
      8
      9
      // 设置代理时,需遵守协议 <UIActionSheetDelegate>
      UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:@"请选择"
      delegate:self
      cancelButtonTitle:@"取消"
      destructiveButtonTitle:@"destructive"
      otherButtonTitles:@"动作 1", @"动作 2", @"动作 3", nil];

      // 将 actionSheet 添加到 view
      [actionSheet showInView:self.view];
    • 先创建,后添加按钮等信息

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      // 设置代理时,需遵守协议 <UIActionSheetDelegate>
      UIActionSheet *actionSheet = [[UIActionSheet alloc] init];

      actionSheet.title = @"请选择";
      [actionSheet addButtonWithTitle:@"取消"];
      [actionSheet addButtonWithTitle:@"动作 1"];
      [actionSheet addButtonWithTitle:@"动作 2"];
      [actionSheet addButtonWithTitle:@"动作 3"];
      actionSheet.cancelButtonIndex = 0;
      actionSheet.delegate = self;

      // 将 actionSheet 添加到 view
      [actionSheet showInView:self.view];
  • Swift

    • 创建时直接添加按钮等信息

      1
      2
      3
      4
      5
      6
      7
      8
      9
      // 设置代理时,需遵守协议 UIActionSheetDelegate
      let actionSheet: UIActionSheet = UIActionSheet(title: "请选择",
      delegate: self,
      cancelButtonTitle: "取消",
      destructiveButtonTitle: "destructive",
      otherButtonTitles: "动作 1", "动作 2", "动作 3")

      // 将 actionSheet 添加到 view
      actionSheet.showInView(self.view)
    • 先创建,后添加按钮等信息

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      // 设置代理时,需遵守协议 UIActionSheetDelegate
      let actionSheet: UIActionSheet = UIActionSheet()

      actionSheet.title = "请选择"
      actionSheet.addButtonWithTitle("取消")
      actionSheet.addButtonWithTitle("动作 1")
      actionSheet.addButtonWithTitle("动作 2")
      actionSheet.addButtonWithTitle("动作 3")
      actionSheet.cancelButtonIndex = 0
      actionSheet.delegate = self

      // 将 actionSheet 添加到 view
      actionSheet.showInView(self.view)

2、UIActionSheet 的设置

  • Objective-C

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    // 设置样式
    /*
    // take appearance from toolbar style otherwise uses 'default'
    UIActionSheetStyleAutomatic = -1,

    UIActionSheetStyleDefault = UIBarStyleDefault,
    UIActionSheetStyleBlackTranslucent = UIBarStyleBlackTranslucent,
    UIActionSheetStyleBlackOpaque = UIBarStyleBlackOpaque ,
    */
    actionSheet.actionSheetStyle = UIActionSheetStyleDefault;

    // 设置标题
    actionSheet.title = @"系统提示";

    // 添加按钮
    /*
    需要放在 [actionSheet showInView:self]; 前才起作用
    */
    [actionSheet addButtonWithTitle:@"确定"];

    // 设置最下边位置的按钮
    /*
    设置最下边位置的按钮:

    大于 0 并且 小于等于按钮的总个数,按照 otherButton、cancelButton、addButtonWith 的顺序依次显示
    在最下边位置。
    等于 0 或者 大于按钮的总个数,按照 otherButton、cancelButton、addButtonWith 的顺序依次显示在最
    下边位置,并且取消最下边一个按钮和上边按钮的间隔。
    */
    actionSheet.cancelButtonIndex = 4;

    // 获取指定位置按钮的标题
    NSString *buttonTitle = [actionSheet buttonTitleAtIndex:5];

    // 获取按钮的个数,只读
    NSInteger numberOfButtons = actionSheet.numberOfButtons;

    // 获取除取消按钮外第一个按钮的索引,只读
    NSInteger firstOtherButtonIndex = actionSheet.firstOtherButtonIndex;

    // 获取 actionSheet 是否已经显示出来,只读
    BOOL alertViewVisible = actionSheet.isVisible;

    // 显示 actionSheet
    [actionSheet showInView:self.view];

    // 隐藏 actionSheet
    [actionSheet dismissWithClickedButtonIndex:0 animated:YES];

    // 设置代理,需遵守协议 <UIActionSheetDelegate>
    actionSheet.delegate = self;
  • Swift

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    // 设置样式
    /*
    case Automatic // take appearance from toolbar style otherwise uses 'default'
    case Default
    case BlackTranslucent
    case BlackOpaque
    */
    actionSheet.actionSheetStyle = .Default

    // 设置标题
    actionSheet.title = "系统提示"

    // 添加按钮
    /*
    需要放在 [actionSheet showInView:self]; 前才起作用
    */
    actionSheet.addButtonWithTitle("确定")

    // 设置最下边位置的按钮
    /*
    设置最下边位置的按钮:

    大于 0 并且 小于等于按钮的总个数,按照 otherButton、cancelButton、addButtonWith 的顺序依次显示
    在最下边位置。
    等于 0 或者 大于按钮的总个数,按照 otherButton、cancelButton、addButtonWith 的顺序依次显示在最
    下边位置,并且取消最下边一个按钮和上边按钮的间隔。
    */
    actionSheet.cancelButtonIndex = 4

    // 获取指定位置按钮的标题
    let buttonTitle: String? = actionSheet.buttonTitleAtIndex(5)

    // 获取按钮的个数,只读
    let numberOfButtons: NSInteger = actionSheet.numberOfButtons

    // 获取除取消按钮外第一个按钮的索引,只读
    let firstOtherButtonIndex: NSInteger = actionSheet.firstOtherButtonIndex

    // 获取 actionSheet 是否已经显示出来,只读
    let alertViewVisible: Bool = actionSheet.visible

    // 显示 actionSheet
    actionSheet.showInView(self.view)

    // 隐藏 actionSheet
    actionSheet.dismissWithClickedButtonIndex(0, animated: true)

    // 设置代理,需遵守协议 UIActionSheetDelegate
    actionSheet.delegate = self

3、UIActionSheetDelegate 的协议方法

  • 需遵守协议 UIActionSheetDelegate,并设置代理

  • Objective-C

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    // 将要显示,操作表显示前被调用
    - (void)willPresentActionSheet:(UIActionSheet *)actionSheet {

    }

    // 已经显示,操作表显示后被调用
    - (void)didPresentActionSheet:(UIActionSheet *)actionSheet {

    }

    // 将要结束选择那个按钮,操作表关闭前被调用
    - (void)actionSheet:(UIActionSheet *)actionSheet willDismissWithButtonIndex:(NSInteger)buttonIndex {

    }

    // 已经结束了选择那个按钮,操作表关闭后被调用,操作表显示中应用程序进入睡眠状态时也会被调用
    -(void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex {

    }

    // 点击了那个按钮,触摸操作表中的任意按钮时被调用,比 willDismissWithButtonIndex 先被调用
    - (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {

    // 按钮的 index 按照 otherButton、cancelButton、addButtonWith 的顺序依次类推
    }

    // 强制关闭,操作表显示中强制关闭时被调用,例如操作表显示时应用程序突然关闭等场所
    -(void)actionSheetCancel:(UIActionSheet *)actionSheet {

    }
  • Swift

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    // 将要显示,操作表显示前被调用
    func willPresentActionSheet(actionSheet: UIActionSheet) {

    }

    // 已经显示,操作表显示后被调用
    func didPresentActionSheet(actionSheet: UIActionSheet) {

    }

    // 将要结束选择那个按钮,操作表关闭前被调用
    func actionSheet(actionSheet: UIActionSheet, willDismissWithButtonIndex buttonIndex: Int) {

    }

    // 已经结束了选择那个按钮,操作表关闭后被调用,操作表显示中应用程序进入睡眠状态时也会被调用
    func actionSheet(actionSheet: UIActionSheet, didDismissWithButtonIndex buttonIndex: Int) {

    }

    // 点击了那个按钮,触摸操作表中的任意按钮时被调用,比 willDismissWithButtonIndex 先被调用
    func actionSheet(actionSheet: UIActionSheet, clickedButtonAtIndex buttonIndex: Int) {

    // 按钮的 index 按照 otherButton、cancelButton、addButtonWith 的顺序依次类推
    }

    // 强制关闭,操作表显示中强制关闭时被调用,例如操作表显示时应用程序突然关闭等场所
    func actionSheetCancel(actionSheet: UIActionSheet) {

    }
文章目录
  1. 1. 前言
  2. 2. 1、UIActionSheet 的创建
  3. 3. 2、UIActionSheet 的设置
  4. 4. 3、UIActionSheetDelegate 的协议方法
隐藏目录