ts-methods-custom-dialog-box.md 4.4 KB
Newer Older
Z
zengyawen 已提交
1 2
# 自定义弹窗

3
通过CustomDialogController类显示自定义弹窗。使用弹窗组件时,可优先考虑自定义弹窗,便于自定义弹窗的样式与内容。
4

H
geshi  
HelloCrease 已提交
5
> **说明:**
6
>
Z
zengyawen 已提交
7
> 从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
Z
zengyawen 已提交
8

Z
zengyawen 已提交
9 10


Z
zengyawen 已提交
11 12 13

## 接口

L
fix doc  
luoying_ace_admin 已提交
14
CustomDialogController(value:{builder: CustomDialog, cancel?: () => void, autoCancel?: boolean, alignment?: DialogAlignment, offset?: Offset, customStyle?: boolean, gridCount?: number})
Z
zengyawen 已提交
15 16


17 18 19 20
**参数:**

| 参数名                    | 参数类型                                     | 必填                  | 参数描述                   |
| ---------------------- | ---------------------------------------- | ------------------------- | ---------------------- |
21
| builder                | [CustomDialog](../../quick-start/arkts-dynamic-ui-elememt-building.md#customdialog) | 是     | 自定义弹窗内容构造器。            |
22
| cancel                 | () => void                            | 否              | 点击遮障层退出时的回调。           |
23
| autoCancel             | boolean                                            | 否              | 是否允许点击遮障层退出。<br>默认值:true           |
24
| alignment              | [DialogAlignment](ts-methods-alert-dialog-box.md#dialogalignment枚举说明)           | 否              | 弹窗在竖直方向上的对齐方式。<br>默认值:DialogAlignment.Default        |
M
match 已提交
25
| offset                 | [Offset](ts-types.md#offset) | 否    | 弹窗相对alignment所在位置的偏移量。 |
26
| customStyle            | boolean                                  | 否                    | 弹窗容器样式是否自定义。<br>默认值:false           |
27
| gridCount<sup>8+</sup> | number                                   | 否                    | 弹窗宽度占[栅格宽度](../../ui/ui-ts-layout-grid-container-new.md)的个数。<br>默认值为4,异常值按默认值处理,最大栅格数为系统最大栅格数。 |
28

Z
zengyawen 已提交
29

30
## CustomDialogController
Z
zengyawen 已提交
31

32
### 导入对象
Z
zengyawen 已提交
33

34
```ts
Z
zengyawen 已提交
35 36 37
dialogController : CustomDialogController = new CustomDialogController(value:{builder: CustomDialog, cancel?: () => void, autoCancel?: boolean})
```

38 39
### open()
open(): void
Z
zengyawen 已提交
40

Z
zengyawen 已提交
41 42 43

显示自定义弹窗内容,若已显示,则不生效。

Z
zengyawen 已提交
44

45 46
### close
close(): void
Z
zengyawen 已提交
47

Z
zengyawen 已提交
48 49 50

关闭显示的自定义弹窗,若已关闭,则不生效。

Z
zengyawen 已提交
51 52

## 示例
Z
zengyawen 已提交
53

H
geshi  
HelloCrease 已提交
54 55
```ts
// xxx.ets
Z
zengyawen 已提交
56 57
@CustomDialog
struct CustomDialogExample {
T
tianyu 已提交
58 59
  @Link textValue: string
  @Link inputValue: string
Z
zengyawen 已提交
60 61 62 63 64 65
  controller: CustomDialogController
  cancel: () => void
  confirm: () => void

  build() {
    Column() {
T
tianyu 已提交
66 67 68 69 70 71
      Text('Change text').fontSize(20).margin({ top: 10, bottom: 10 })
      TextInput({ placeholder: '', text: this.textValue }).height(60).width('90%')
        .onChange((value: string) => {
          this.textValue = value
        })
      Text('Whether to change a text?').fontSize(16).margin({ bottom: 10 })
Z
zengyawen 已提交
72 73 74 75 76 77 78 79
      Flex({ justifyContent: FlexAlign.SpaceAround }) {
        Button('cancel')
          .onClick(() => {
            this.controller.close()
            this.cancel()
          }).backgroundColor(0xffffff).fontColor(Color.Black)
        Button('confirm')
          .onClick(() => {
T
tianyu 已提交
80
            this.inputValue = this.textValue
Z
zengyawen 已提交
81 82 83 84 85 86 87 88 89 90 91
            this.controller.close()
            this.confirm()
          }).backgroundColor(0xffffff).fontColor(Color.Red)
      }.margin({ bottom: 10 })
    }
  }
}

@Entry
@Component
struct CustomDialogUser {
T
tianyu 已提交
92 93
  @State textValue: string = ''
  @State inputValue: string = 'click me'
Z
zengyawen 已提交
94
  dialogController: CustomDialogController = new CustomDialogController({
M
match 已提交
95 96 97 98 99 100
    builder: CustomDialogExample({
      cancel: this.onCancel,
      confirm: this.onAccept,
      textValue: $textValue,
      inputValue: $inputValue
    }),
Z
zengyawen 已提交
101
    cancel: this.existApp,
M
match 已提交
102
    autoCancel: true,
M
matchzhou 已提交
103
    alignment: DialogAlignment.Default,
M
match 已提交
104 105
    offset: { dx: 0, dy: -20 },
    gridCount: 4,
M
matchzhou 已提交
106
    customStyle: false
Z
zengyawen 已提交
107 108 109 110 111
  })

  onCancel() {
    console.info('Callback when the first button is clicked')
  }
M
match 已提交
112

Z
zengyawen 已提交
113 114 115
  onAccept() {
    console.info('Callback when the second button is clicked')
  }
M
match 已提交
116

Z
zengyawen 已提交
117 118 119 120 121 122
  existApp() {
    console.info('Click the callback in the blank area')
  }

  build() {
    Column() {
T
tianyu 已提交
123
      Button(this.inputValue)
Z
zengyawen 已提交
124 125 126 127 128 129 130 131
        .onClick(() => {
          this.dialogController.open()
        }).backgroundColor(0x317aff)
    }.width('100%').margin({ top: 5 })
  }
}
```

Z
zengyawen 已提交
132
![zh-cn_image_0000001219744203](figures/zh-cn_image_0000001219744203.gif)