EditableTextView.Changed is a method like every other result's. AlertDialogResult, PopconfirmResult and DateTimeResult spell Canceled the American way, matching EditableTextView and LoadingOverlayResult. Callers, Gallery and docs updated.
60 lines
2.8 KiB
Markdown
60 lines
2.8 KiB
Markdown
# 053 DateRangePicker · 日期范围选择器
|
|
|
|
## 用途
|
|
|
|
在弹层中先选开始日期、再选结束日期,悬停时预览范围,确认后写入。
|
|
|
|
## 最小示例
|
|
|
|
```go
|
|
var stay mujica.DateRange
|
|
view := func(c *ui.Context) {
|
|
mujica.Use(c, mujica.Settings{})
|
|
r := mujica.DateRangePicker(c, &stay, mujica.DateRangePickerOptions{Label: "Stay"})
|
|
if r.Changed() {
|
|
fmt.Println("stay", stay.Start, stay.End, stay.Days())
|
|
}
|
|
}
|
|
ui.Render(view, 400, 300, 1)
|
|
```
|
|
|
|
## 参数
|
|
|
|
`func DateRangePicker(c *ui.Context, value *DateRange, opts DateRangePickerOptions) DateTimeResult`,返回值的 `Element` 字段是组件元素。
|
|
|
|
| 字段 | 类型 | 默认值 | 含义 |
|
|
| --- | --- | --- | --- |
|
|
| `Layout` | `string` | `2006-01-02` | 触发器与摘要中的日期格式。 |
|
|
| `Min` | `Date` | 零值 | 两端最早日期。 |
|
|
| `Max` | `Date` | 零值 | 两端最晚日期。 |
|
|
| `DisableDate` | `func(Date) bool` | nil | 不可选日期;范围内包含此类日期时拒绝并提示。 |
|
|
| `WeekStart` | `WeekStart` | `WeekStartLocale` | 周起始日。 |
|
|
| `Today` | `Date` | 零值(系统时钟) | 今日标记与空值时的起始月份。 |
|
|
| `ReadOnly` | `bool` | false | 只读:可聚焦、可复制(Cmd/Ctrl+C),不能修改,不打开弹层。 |
|
|
| `Disabled` | `bool` | false | 禁用。 |
|
|
| `Label` | `string` | 内置“日期范围” | 辅助技术名称。 |
|
|
|
|
## 状态
|
|
|
|
触发器:默认、悬停、聚焦、禁用。弹层:起止日期酒红填充,中间日期浅色带;选择结束前随指针或焦点预览范围;错误说明;“确定”在两端选齐前禁用。
|
|
|
|
## 事件
|
|
|
|
`Changed()`:点击“确定”或“清空”使值改变时为 true。`Canceled()`:按 Escape、点击“取消”或点击弹层外关闭、草稿被丢弃时为 true。
|
|
|
|
## 键盘操作
|
|
|
|
- Enter/Space/↓:打开弹层。
|
|
- 日历内方向键移动,Enter 依次选择开始与结束。
|
|
- 早于开始日期的选择会重新开始范围。
|
|
- Tab 到“清空”“取消”“确定”。
|
|
- Escape:放弃草稿。
|
|
|
|
## 限制
|
|
|
|
- 弹层一次显示一个月;跨月范围通过翻页完成。
|
|
- `DateRange` 为闭区间,`Days()` 计入两端。
|
|
- 日期与时间值不带时区:`Date`、`YearMonth`、`TimeOfDay` 只保存日历字段,组件内部计算不做 UTC 转换。
|
|
- `Today` 为零值时读取 `c.Now()`(系统本地时区);需要固定“今天”(测试、跨时区应用)时显式传入。
|
|
- 无障碍:MyGo v0.2.10 没有公开设置弹出按钮展开状态(`expanded`)、数值范围(`hasRange`/`accRange`)与值(`accValue`)的接口,这些字段只在 MyGo 内部组件中赋值(ui/element.go:286-295,例如 ui/base.go:297、ui/indicators.go:61)。因此触发器只能声明为 `RolePopUpButton` 而无法报告展开状态;时间段以 `Description` 读出当前值与范围,错误通过 `Error()` 关联。
|