ActionSheet 动作面板

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

规则

  • 提供清晰的退出按钮。

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

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

代码演示

基本

  1. import { ActionSheet, Button, Toast } from 'antd-mobile';
  2. const Test = React.createClass({
  3. getInitialState() {
  4. return {
  5. clicked: 'none',
  6. clicked1: 'none',
  7. clicked2: 'none',
  8. };
  9. },
  10. showActionSheet() {
  11. const BUTTONS = ['操作 0', '操作 1', '操作 2', '删除', '取消'];
  12. ActionSheet.showActionSheetWithOptions({
  13. options: BUTTONS,
  14. cancelButtonIndex: BUTTONS.length - 1,
  15. destructiveButtonIndex: BUTTONS.length - 2,
  16. // title: '标题',
  17. message: '我是描述我是描述',
  18. maskClosable: true,
  19. },
  20. (buttonIndex) => {
  21. this.setState({ clicked: BUTTONS[buttonIndex] });
  22. });
  23. },
  24. icons: [
  25. { iconName: 'mail', title: '发邮件' },
  26. { iconName: 'message', title: '发短信' },
  27. { iconName: 'team', title: '发送到群' },
  28. { iconName: 'download', title: '下载' },
  29. { iconName: 'delete', title: '删除' },
  30. { iconName: 'ellipsis', title: '更多' },
  31. ],
  32. showShareActionSheet() {
  33. const icons = [...this.icons];
  34. icons.length = 4;
  35. ActionSheet.showShareActionSheetWithOptions({
  36. options: icons,
  37. // title: '标题',
  38. message: '我是描述我是描述',
  39. },
  40. (buttonIndex) => {
  41. this.setState({ clicked1: buttonIndex > -1 ? icons[buttonIndex].title : 'cancel' });
  42. // also support Promise
  43. return new Promise((resolve) => {
  44. Toast.info('1000ms 后关闭');
  45. setTimeout(resolve, 1000);
  46. });
  47. });
  48. },
  49. showShareActionSheetMulpitleLine() {
  50. const icons = [[...this.icons], [...this.icons]];
  51. ActionSheet.showShareActionSheetWithOptions({
  52. options: icons,
  53. // title: '标题',
  54. message: '我是描述我是描述',
  55. },
  56. (buttonIndex, rowIndex) => {
  57. this.setState({ clicked2: buttonIndex > -1 ? icons[rowIndex][buttonIndex].title : 'cancel' });
  58. });
  59. },
  60. render() {
  61. return (<div style={{ margin: '0 15px' }}>
  62. <div style={{ margin: '15px 0' }}>
  63. <Button type="ghost" onClick={this.showActionSheet}>默认状态操作列表</Button>
  64. </div>
  65. <div style={{ margin: '15px 0' }}>
  66. <Button type="ghost" onClick={this.showShareActionSheet}>带分享功能的操作列表</Button>
  67. </div>
  68. <div style={{ margin: '15px 0' }}>
  69. <Button type="ghost" onClick={this.showShareActionSheetMulpitleLine}>带多行按钮的分享功能操作列表</Button>
  70. </div>
  71. </div>);
  72. },
  73. });
  74. ReactDOM.render(<Test />, mountNode);

ActionSheet动作面板 - 图1

API

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) - 点击蒙层是否允许关闭,默认允许

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

callback支持返回 Promise

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

static close(androidActionSheetName) - (android only) programmatically close.