MujicaUI

Inputs · #028

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

028 SearchInput 搜索框

用途

搜索模式:放大镜、输入、清空与提交。查找栏模式(Find):在此基础上显示匹配数量、上一项与下一项,对应 MyGo 的 Search field 与 Find bar。匹配由调用方计算。

最小示例

matches := 0
if query != "" {
	matches = strings.Count(text, query)
}
r := input.SearchInput(c, &query, input.SearchInputOptions{Find: true, Matches: matches, Current: &current})
if r.Moved() {
	fmt.Println("show match", current)
}

签名:func SearchInput(c *ui.Context, query *string, opts SearchInputOptions) SearchInputResult

参数

字段类型默认值含义
query*string必填查询文字。
Placeholderstring“搜索”或“查找”占位文字。
Labelstring占位文字无障碍名称。
Disabledboolfalse禁用(查找快捷键也停用)。
Findboolfalse开启查找栏模式。
Matchesint0匹配数量;负数 panic。
Current*intnil当前匹配下标;Find 时必填,组件会把它夹在有效范围内。

状态

同 TextInput;查找栏模式下显示“第 n 项,共 m 项”或“无匹配”(状态角色,变化时可被朗读),无匹配时上一项/下一项禁用。

事件

  • Changed():查询改变(含清空)。
  • Submitted():搜索模式下 Enter。
  • Moved():查找栏模式下当前匹配改变。

键盘操作

搜索模式:Enter 提交,Escape 清空。查找栏模式:Enter 下一项,Shift+Enter 上一项,macOS 上 Cmd+G / Shift+Cmd+G、其他平台 F3 / Shift+F3(窗口级),循环到首尾;Escape 清空。

限制

  • MyGo 单行编辑器把 Shift+Enter 当作普通提交且不公开修饰键(editor.go:489,submitMods 未导出),组件用 HandleInput 先截获 Shift+Enter。
  • 输入法组合期间无法阻止提交与匹配跳转:MyGo 不公开组合状态,组合文本存在未导出的 editor.compose(ui/editor.go:73),带编辑器的元素收不到 InputCompose 事件(ui/input.go:689)。各平台输入法在组合时通常自己消费 Enter;只有未被输入法消费的按键会触发提交或跳转。公开接口也无法间接得知:Element.TextCaret(ui/handler.go:82)只是自绘控件声明输入位置的设置方法,Tester.TextCaret 返回的 Active(ui/headless.go:370-373)只表示可编辑元素持有键盘,不表示正在组合。
  • 没有“完成/关闭”按钮;是否显示查找栏由调用方决定。