【问题标题】:Customizing a view in SwiftUI在 SwiftUI 中自定义视图
【发布时间】:2020-06-30 14:57:37
【问题描述】:

我刚开始使用SwiftUI 并使用它。 我已经面临这个挑战。

我有一个带有滑块的视图:

struct RangeSpanView: View {
    @State var sliderValue = 0.0
    var minimumValue = 0.0
    var maximumValue = 100.0

    var body: some View {
        VStack {
            Spacer()
            HStack {
                Text("\(Int(minimumValue))")
                Slider(value: $sliderValue, in: minimumValue...maximumValue)
                Text("\(Int(maximumValue))")
            }.padding()
            Text("\(Int(sliderValue))")
            Spacer()
        }
    }
}

这是加载视图的代码。

var body: some View {
    NavigationLink(destination: RangeSpanView(),
                   label: {
                       .......... // Useful code.
    })
}

在这一点上,它并没有做太多,但它确实有效。尽管如此,这是我想做的,但我做不到。

我需要能够将参数传递给 RangeSpanView,以便我可以决定滑块的 minimumValuemaximumValue 值的自定义值。我已经尝试了几种我能想到或通过搜索网络找到的代码变体。但它们要么都不起作用,要么出现某种错误。

我的想法是我想要这样的东西:

RangeSpanView(minSliderVal: 20, maxSliderVal: 470)

工作,以便我可以根据需要调整视图。

这可能吗?正确的语法是什么?

【问题讨论】:

  • 这将与 Swift 中的任何结构一样工作。所以,要么RangeSpanView(minimumValue: 20, maximumValue: 470)(并将sliderValue设为私有)......要么创建一个自定义init(minSliderVal: Int, maxSliderVal: Int)
  • 将 sliderValue 设为私有,会产生错误消息:“无法将 'Double' 类型的值转换为预期的参数类型 'Binding'”。
  • 你把它改成了@State private var sliderValue = 0.0 并给出了这个错误?!
  • 是的,我尝试了大约 2 或 3 种变体,我认为这是其中之一。
  • 我现在面临这个新挑战:stackoverflow.com/questions/62669320/…

标签: ios swift binding swiftui


【解决方案1】:

要么删除 minimumValue 和 maximumValue 的默认值,要么添加一个像这样的初始化:

init(
        minimumValue: CGFloat = 0.0,
        maximumValue: CGFloat = 100.0
    ) {
        self.minimumValue = minimumValue
        self.maximumValue = maximumValue
    }

或者如果您希望将这些值更改为使用@Binding var,以便您可以从呈现它的视图传递其他@State 变量

【讨论】:

  • 按照您的建议,它使用 init() 函数工作。我剩下的唯一问题是滑块值。一旦我开始使用滑块就可以了。但在此之前,我认为没有办法强制执行一致的初始值,该初始值介于最小值和最大值之间。这个问题必须有一些解决方案。但我所尝试的只会导致错误。
  • 我在这里提出了一个新问题stackoverflow.com/questions/62669320/…
猜你喜欢
  • 2020-03-09
  • 2019-10-21
  • 1970-01-01
  • 1970-01-01
  • 2021-06-04
  • 2022-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多