跳到正文

SwiftUI

ui.SwiftUI 在 Go 应用中嵌入真正的 macOS 控件。普通 QuickGUI 组件不需要它。

#Host

在 ui.SwiftUI.Host 内创建控件。Host 是原生视图边界,可以根据内容调整自身尺寸。

func SwiftUiHostExample() *ui.Element {
	return ui.SwiftUI.Host(
		ui.SwiftUIHostProps{MatchContents: true},
		func() *ui.Element {
			return ui.SwiftUI.Button(ui.SwiftUIButtonProps{Label: "Continue"})
		},
	)
}

#原生控件

Button、Slider、Toggle、ProgressView、Stepper、TextField、SecureField、Picker、SegmentedControl、DatePicker、ColorPicker 和 Gauge。外观和行为与系统控件一致。

#受控值

绑定信号,并从原生回调中保存值。SwiftUI 控件和 QuickGUI 视图可以共享同一个信号。DatePicker 使用毫秒级 Unix 时间戳。

func SwiftUiToggleExample() *ui.Element {
	on, setOn := ui.CreateSignal(true)
	return ui.SwiftUI.Host(
		ui.SwiftUIHostProps{MatchContents: true},
		func() *ui.Element {
			return ui.SwiftUI.Toggle(ui.SwiftUIToggleProps{
				IsOn:         on,
				Label:        "Notifications",
				OnIsOnChange: func(next bool, _ *native.Event) { setOn(next) },
			})
		},
	)
}

#尺寸

MatchContents: true 会根据控件同时决定两个轴的尺寸。只要固有高度时,使用 ui.SwiftUIMatchContents{Vertical: true},宽度自行设置。

ui.SwiftUIHostProps{
	MatchContents: ui.SwiftUIMatchContents{Vertical: true},
	PartProps:     ui.PartProps{Style: ui.Style().Width(320)},
}

#平台支持

SwiftUI 托管需要 macOS。外观可能随操作系统版本变化。