如何翻译视图中的绑定?
Posted
技术标签:
【中文标题】如何翻译视图中的绑定?【英文标题】:How to translate bindings in a view? 【发布时间】:2019-12-11 13:28:43 【问题描述】:我创建了一个用于设置时间(分钟和秒)的视图。它使用两个绑定到两个状态变量的选轮器。
现在我想在应用程序的不同位置使用该视图,但我不喜欢当时有两个单独变量的界面。相反,我希望只有一个绑定变量以秒为单位保存时间(因此 time = 185 将转换为 3 分 5 秒)。
绑定之间可以有某种“适配器”吗?
这是视图:
import SwiftUI
struct TimePicker: View
var minutes: Binding<Int>
var seconds: Binding<Int>
var body: some View
HStack()
Spacer()
Picker(selection: minutes, label: EmptyView())
ForEach((0...9), id: \.self) ix in
Text("\(ix)").tag(ix)
.pickerStyle(WheelPickerStyle()).frame(width: 50).clipped()
Text("Min.")
Picker(selection: seconds, label: EmptyView())
ForEach((0...59), id: \.self) ix in
Text("\(ix)").tag(ix)
.pickerStyle(WheelPickerStyle()).frame(width: 50).clipped()
Text("Sec.")
Spacer()
【问题讨论】:
是的,Binding(get: @escaping () -> Value, set: @escaping (Value) -> Void)
@Asperi 这是一个有趣的提示,但我正在努力在我的示例中实现它。
@G.Marc 这可能有助于理解:gist.github.com/AliSoftware/ecb5dfeaa7884fc0ce96178dfdd326f8
【参考方案1】:
这是基于Binding(get:set:)
的方法
struct TimePicker: View
@Binding var total: Int
var minutes: Binding<Int>
Binding<Int>(get: self._total.wrappedValue / 60 ,
set: self._total.wrappedValue = self._total.wrappedValue % 60 + $0 * 60 )
var seconds: Binding<Int>
Binding<Int>(get: self._total.wrappedValue % 60 ,
set: self._total.wrappedValue = (self._total.wrappedValue / 60) * 60 + $0 )
var body: some View
HStack()
Spacer()
Picker(selection: minutes, label: EmptyView())
ForEach((0...9), id: \.self) ix in
Text("\(ix)").tag(ix)
.pickerStyle(WheelPickerStyle()).frame(width: 50).clipped()
Text("Min.")
Picker(selection: seconds, label: EmptyView())
ForEach((0...59), id: \.self) ix in
Text("\(ix)").tag(ix)
.pickerStyle(WheelPickerStyle()).frame(width: 50).clipped()
Text("Sec.")
Spacer()
.frame(height: 200)
struct TestTimePicker: View
@State var seconds = 185
var body: some View
VStack
Text("Current: \(seconds)")
TimePicker(total: $seconds)
struct TestConditionalPicker_Previews: PreviewProvider
static var previews: some View
TestTimePicker()
【讨论】:
您有什么理由使用self._total.wrappedValue
而不仅仅是self.total
?以上是关于如何翻译视图中的绑定?的主要内容,如果未能解决你的问题,请参考以下文章
如何将架构绑定添加到 SQL Server 2008 中的视图
如何将动作绑定到 python 中的 tkinter 树视图的标题?