MujicaUI

Choices · #036

Select 浅色主题渲染快照
浅色 · 渲染快照
Select 深色主题渲染快照
深色 · 渲染快照

036 Select · 选择器

用途

从弹出列表中选择一个值。支持占位、清空、禁用项、空状态与输入首字母定位。

最小示例

plan := ""
options := []input.SelectOption[string]{
	{Value: "free", Label: "Free"},
	{Value: "pro", Label: "Pro"},
	{Value: "team", Label: "Team", Disabled: true},
}
view := func(c *ui.Context) {
	core.Use(c, core.Settings{})
	input.Select(c, &plan, options, input.SelectOptions{Clearable: true, Label: "Plan"})
}
ui.Render(view, 400, 300, 1)

参数

func Select[T comparable](c *ui.Context, value *T, options []SelectOption[T], opts SelectOptions) ChoiceResult。*value 不等于任何选项时显示占位;清空把值设为 T 的零值。

SelectOption[T]:Value T(稳定值)、Label string、Disabled bool(显示但不可选,方向键跳过)。

字段类型默认值含义
Placeholderstring内置“请选择…”无值时的提示。
Clearableboolfalse有值时显示清空按钮,并允许 Backspace/Delete 清空。
Disabledboolfalse禁用。
Emptystring内置“暂无选项”options 为空时弹层中的说明。
Labelstring""无障碍名称。

状态

默认、悬停(边框加深)、展开(酒红边框、箭头朝上)、聚焦、禁用;弹层中高亮项(浅底)、已选项(玫瑰底 + 勾号 + 酒红文字)、键盘高亮项另有左侧竖条、禁用项、空状态。

事件

Changed() 在值变化(选择或清空)的那一帧返回 true。

键盘操作

  • Enter / Space / ↑ / ↓:打开弹层。
  • 弹层中 ↑/↓、Home、End 移动高亮,Enter 或 Space 选择,Escape 关闭;关闭后焦点回到选择器。
  • 弹层关闭时输入字母:选中以该前缀开头的选项(1 秒内连续输入组成前缀,重复同一字母则循环);支持输入法提交的中文。
  • Backspace / Delete:Clearable 时清空。

限制

  • 基于 ui.SelectBase。其高亮索引没有公开的设置接口(ui/base.go:260),所以弹层打开时输入字母不移动高亮,只在弹层关闭时定位。
  • 清空按钮不占 Tab 位(与 MyGo 搜索框一致),键盘用 Backspace/Delete 清空;它的命中区域为 28×28 DIP。
  • 选项行的角色为 ListItem,选中状态由 SelectBase.Item 报告。SelectParts 没有关闭弹层的接口(ui/base.go:310),所以选择器在弹层打开时被禁用后不再构建弹层;重新启用时弹层会再次显示。