1# 自定义弹窗 2 3 4自定义弹窗CustomDialog可用于广告、中奖、警告、软件更新等与用户交互响应操作。开发者可以通过CustomDialogController类显示自定义弹窗。具体用法请参考[自定义弹窗](../reference/arkui-ts/ts-methods-custom-dialog-box.md)。 5 6 7## 创建自定义弹窗 8 91. 使用\@CustomDialog装饰器装饰自定义弹窗。 10 112. \@CustomDialog装饰器用于装饰自定义弹框,此装饰器内进行自定义内容(也就是弹框内容)。 12 13 ```ts 14 @CustomDialog 15 struct CustomDialogExample { 16 controller: CustomDialogController 17 build() { 18 Column() { 19 Text('我是内容') 20 .fontSize(20) 21 .margin({ top: 10, bottom: 10 }) 22 } 23 } 24 } 25 ``` 26 273. 创建构造器,与装饰器呼应相连。 28 29 ```ts 30 dialogController: CustomDialogController = new CustomDialogController({ 31 builder: CustomDialogExample({}), 32 }) 33 ``` 34 354. 点击与onClick事件绑定的组件使弹窗弹出 36 37 ```ts 38 Flex({justifyContent:FlexAlign.Center}){ 39 Button('click me') 40 .onClick(() => { 41 this.dialogController.open() 42 }) 43 }.width('100%') 44 ``` 45 46 ![zh-cn_image_0000001562700493](figures/zh-cn_image_0000001562700493.png) 47 48 49## 弹窗的交互 50 51弹窗可用于数据交互,完成用户一系列响应操作。 52 53 541. 在\@CustomDialog装饰器内添加按钮操作,同时添加数据函数的创建。 55 56 ```ts 57 @CustomDialog 58 struct CustomDialogExample { 59 controller: CustomDialogController 60 cancel: () => void 61 confirm: () => void 62 build() { 63 Column() { 64 Text('我是内容').fontSize(20).margin({ top: 10, bottom: 10 }) 65 Flex({ justifyContent: FlexAlign.SpaceAround }) { 66 Button('cancel') 67 .onClick(() => { 68 this.controller.close() 69 this.cancel() 70 }).backgroundColor(0xffffff).fontColor(Color.Black) 71 Button('confirm') 72 .onClick(() => { 73 this.controller.close() 74 this.confirm() 75 }).backgroundColor(0xffffff).fontColor(Color.Red) 76 }.margin({ bottom: 10 }) 77 } 78 } 79 } 80 ``` 81 822. 页面内需要在构造器内进行接收,同时创建相应的函数操作。 83 84 ```ts 85 dialogController: CustomDialogController = new CustomDialogController({ 86 builder: CustomDialogExample({ 87 cancel: this.onCancel, 88 confirm: this.onAccept, 89 }), 90 alignment: DialogAlignment.Default, // 可设置dialog的对齐方式,设定显示在底部或中间等,默认为底部显示 91 }) 92 onCancel() { 93 console.info('Callback when the first button is clicked') 94 } 95 onAccept() { 96 console.info('Callback when the second button is clicked') 97 } 98 ``` 99 100 ![zh-cn_image_0000001511421320](figures/zh-cn_image_0000001511421320.png) 101