Skip to content

Checkbox 复选框 ​

受控复选框。@Binding var checked 双向绑定,支持三态(勾选 / 未勾选 / 不确定)。

契约源:lh-ui-core/specs/checkbox.json · 黄金用例:lh-ui-core/cases/checkbox.json(6 条,已翻译为 XCTest,macOS 宿主即可运行)

状态 ​

勾选态为实心主色方块 + 白色勾形;不确定态为实心主色方块 + 白色横杠;未勾选为描边空框。

9:41Checkbox 状态
未勾选已勾选
不确定禁用

HTML 模拟预览(iOS / SwiftUI 外观),非真机渲染

swift
@State private var checked = false

LhCheckbox(checked: $checked, label: "已勾选") { newValue in
  // onChange
}

尺寸 ​

三档尺寸映射到 checkbox.size 令牌;勾形描边宽度取 checkbox.checkWidth, 不确定态横杠宽度为方框尺寸乘 checkbox.dashScale(50%)。

9:41Checkbox 尺寸
小号中号大号

HTML 模拟预览(iOS / SwiftUI 外观),非真机渲染

不确定态 ​

indeterminate = true 时不显示勾形而显示横杠;点击后必定变为勾选(黄金用例 indeterminate-becomes-checked),而非切换。

swift
@State private var checked = false

LhCheckbox(checked: $checked, label: "全选", indeterminate: somePartial) { _ in }

API ​

Props ​

属性说明类型默认值
checked勾选状态(受控双向绑定)Bool—
indeterminate是否不确定态(显示横杠,点击后变勾选)Boolfalse
disabled是否禁用(不触发 onChange)Boolfalse
size复选框尺寸,映射到尺寸令牌LhCheckboxSize.medium
label文字标签String""
onChange状态变化回调,payload 为新值((Bool) -> Void)?nil

LhCheckboxSize ​

值尺寸
.smallcheckbox.size.small(16pt)
.mediumcheckbox.size.medium(20pt)
.largecheckbox.size.large(24pt)

颜色 ​

状态方块底色标记色
未勾选透明 + color.border.base 描边(checkbox.borderWidth)—
勾选 / 不确定color.primary.defaultcolor.onPrimary
禁用color.disabled.bg + color.disabled.border 描边color.disabled.text

令牌对照 ​

令牌用途
checkbox.size.{small,medium,large}三档尺寸
checkbox.borderRadius / checkbox.borderWidth圆角(跟随 radius.small)与描边宽度
checkbox.checkWidth勾形描边宽度
checkbox.dashScale不确定态横杠相对方框的比例(50%)
checkbox.gap方框与文字间距(跟随 spacing.sm)
color.primary.default / color.onPrimary勾选态底/标记色
color.border.base未勾选描边色
color.disabled.{bg,border,text}禁用态三色

黄金用例对照 ​

case id断言本地测试
tap-toggles-and-emits-onchange点击翻转并回调 onChange(true)testTapTogglesAndEmitsOnChange
tap-checked-unchecks已勾选点击变未勾选testTapCheckedUnchecks
disabled-blocks-change禁用态不触发 onChangetestDisabledBlocksChange
checked-uses-primary-tokens勾选态消费主色与 onPrimarytestCheckedUsesPrimaryTokens
unchecked-uses-border-token未勾选消费描边令牌testUncheckedUsesBorderToken
indeterminate-becomes-checked不确定态点击后必为勾选testIndeterminateBecomesChecked

另有专项:testSizeUsesSizeTokens / testStrokeUsesCheckboxTokens / testDarkColorsComeFromDarkTokens / testDisabledInDarkUsesDarkDisabledTokens / testDimensionsAreIdenticalInDarkMode / testCheckboxViewInitAcceptsConstant。

bash
swift test --filter LhCheckboxTests    # macOS 宿主即可跑,无需模拟器