ActionSheet 动作面板

从底部浮出的模态,提供和当前场景相关的 2 个以上操作或者更多描述内容。

规则

  • 提供清晰的退出按钮。

  • 可高亮破坏性操作,eg:将『删除』处理成红色文本。

  • 不要放置过多内容,避免面板纵向滚动。

代码演示

基本用法示例

  1. import { ActionSheet, Button, Toast } from 'antd-mobile';
  2. // fix touch to scroll background page on iOS
  3. // https://github.com/ant-design/ant-design-mobile/issues/307
  4. // https://github.com/ant-design/ant-design-mobile/issues/163
  5. const isIPhone = new RegExp('\\biPhone\\b|\\biPod\\b', 'i').test(window.navigator.userAgent);
  6. let wrapProps;
  7. if (isIPhone) {
  8. wrapProps = {
  9. onTouchStart: e => e.preventDefault(),
  10. };
  11. }
  12. const Test = React.createClass({
  13. getInitialState() {
  14. return {
  15. clicked: 'none',
  16. clicked1: 'none',
  17. clicked2: 'none',
  18. };
  19. },
  20. showActionSheet() {
  21. const BUTTONS = ['操作一', '操作二', '操作三', '删除', '取消'];
  22. ActionSheet.showActionSheetWithOptions({
  23. options: BUTTONS,
  24. cancelButtonIndex: BUTTONS.length - 1,
  25. destructiveButtonIndex: BUTTONS.length - 2,
  26. // title: '标题',
  27. message: '我是描述我是描述',
  28. maskClosable: true,
  29. 'data-seed': 'logId',
  30. wrapProps,
  31. },
  32. (buttonIndex) => {
  33. this.setState({ clicked: BUTTONS[buttonIndex] });
  34. });
  35. },
  36. icons: [
  37. { iconName: 'mail', title: '发邮件' },
  38. { iconName: 'message', title: '发短信' },
  39. { iconName: 'team', title: '发送到群' },
  40. { iconName: 'download', title: '下载' },
  41. { iconName: 'delete', title: '删除' },
  42. { iconName: 'ellipsis', title: '更多' },
  43. ],
  44. showShareActionSheet() {
  45. const icons = [...this.icons];
  46. icons.length = 4;
  47. ActionSheet.showShareActionSheetWithOptions({
  48. options: icons,
  49. // title: '标题',
  50. message: '我是描述我是描述',
  51. },
  52. (buttonIndex) => {
  53. this.setState({ clicked1: buttonIndex > -1 ? icons[buttonIndex].title : 'cancel' });
  54. // also support Promise
  55. return new Promise((resolve) => {
  56. Toast.info('1000ms 后关闭');
  57. setTimeout(resolve, 1000);
  58. });
  59. });
  60. },
  61. showShareActionSheetMulpitleLine() {
  62. const icons = [[...this.icons], [...this.icons]];
  63. ActionSheet.showShareActionSheetWithOptions({
  64. options: icons,
  65. // title: '标题',
  66. message: '我是描述我是描述',
  67. },
  68. (buttonIndex, rowIndex) => {
  69. this.setState({ clicked2: buttonIndex > -1 ? icons[rowIndex][buttonIndex].title : 'cancel' });
  70. });
  71. },
  72. render() {
  73. return (<div style={{ margin: '0 15px' }}>
  74. <div style={{ margin: '15px 0' }}>
  75. <Button type="ghost" onClick={this.showActionSheet}>默认状态</Button>
  76. </div>
  77. <div style={{ margin: '15px 0' }}>
  78. <Button type="ghost" onClick={this.showShareActionSheet}>分享功能</Button>
  79. </div>
  80. <div style={{ margin: '15px 0' }}>
  81. <Button type="ghost" onClick={this.showShareActionSheetMulpitleLine}>带多行按钮的分享功能</Button>
  82. </div>
  83. </div>);
  84. },
  85. });
  86. ReactDOM.render(<Test />, mountNode);

ActionSheet动作面板 - 图1

API ( 适用平台:WEB、React-Native )

static showActionSheetWithOptions(options: Object, callback: Function)

options对象必须包含以下的一个或者多个:

  • options (array of strings) - 按钮标题列表 (required)

  • cancelButtonIndex (int) - 按钮列表中取消按钮的索引位置

  • destructiveButtonIndex (int) - 按钮列表中破坏性按钮(一般为删除)的索引位置

  • title (string) - 顶部标题

  • message (string/React.element) - 顶部标题下的简要消息

  • maskClosable (bool) - 点击蒙层是否允许关闭,默认允许

  • androidActionSheetName (string) - android 平台下可以传入一个名字

callback支持返回 Promise

static showShareActionSheetWithOptions(options: Object, callback: Function)

options对象必须包含以下的一个或者多个:

  • options (array of {icon:React.node, iconName:string, title:string}) - 分享按钮列表 (required)

    • 注意:iconName为 icon 组件里的某一个 icon 的名字,优先级高于icon属性设置(icon属性用于设置自定义内容)

    • options 可以是二维数组,能显示多行按钮,例如[[{icon,title},{icon,title}], [{icon,title},{icon,title}]]表示两行两列

    • 当为二维数组时 callback 有两个参数,第一个为序列、第二个为序列

  • cancelButtonText (string) - (web only) 默认为取消

  • title (string) - 顶部标题

  • message (string/React.element) - 顶部标题下的简要消息

  • maskClosable (bool) - 点击蒙层是否允许关闭,默认允许

callback支持返回 Promise

static close() - (web、android only) programmatically close.