【问题标题】:is changing between view files through a swift picker possible?是否可以通过快速选择器在视图文件之间进行更改?
【发布时间】:2022-01-12 11:09:57
【问题描述】:

为不同的视图拥有三个单独的文件,我试图将它们放在一个 CheckerView 文件中,该文件是从 WindowGroup 中的主文件调用的。我希望我的选择器更改标签之间滑动的视图,如CheckerView Implementation 所示。当前未显示的另外两个视图被注释掉。 Correct First ViewIncorrect Second View.我相信我需要使用枚举,但由于我最近学习了这种语言,所以不确定如何处理这个问题。我已经通过 tabView 正确实现了类似的功能,但是选择器更好地适用于我正在尝试做的事情。感谢您的帮助!

【问题讨论】:

标签: swift swiftui uipickerview picker


【解决方案1】:

枚举是一个不错的选择,因为它们具有固定数量的可能值,并且可以具有描述性名称,这两者都将有助于您的视图代码更具可读性。

首先要做的是定义一个枚举,它为您声明可能的选项:

enum ViewChoice { // you probably want a better name than this
  case palindrome, anagram, pangram
}

那么在你的父视图中,你的状态变量需要是这种类型的

struct CheckerView: View {
  @State private var toView: ViewChoice = .palindrome

  // ...
}

然后你的选择器应该在每个选项的标签中使用枚举值:

Picker(..., selection: $toView) {
  Text("Palindrome").tag(ViewChoice.palindrome)
  // etc.
}

一旦这些更改到位,您应该让toView 像以前一样继续更新,但它只能是三个选择之一。

然后您可以使用switch 语句来包含适当的子视图:

switch(toView) {
case .palindrome:
  PalindromeView()
case .anagram:
  AnagramView()
case .pangram:
  PangramView()
}

请注意,您不必使用枚举:您当前将toView 设置为整数并在选取器中正确更改其值。因此,您可以使用case 0case 1 等编写 switch 语句 - 但这些数字不仅比使用名称更易读,还必须在 switch 语句中添加 default 选项,因为无论何时使用switch 您必须考虑所有可能的可能性,并且整数可能是 0、1 或 2 以外的其他值,即使这些是您使用的唯一值。

另请注意,包括代码截图对于人们阅读和回答来说是棘手的 - 最好将代码内联,就像我在这里所做的那样。请参阅 Stack Overflow 帮助指南中的 How do I ask a good question?

【讨论】:

  • 非常感谢,这成功了!我在那个解决方案的领域,感谢验证和提示。
猜你喜欢
  • 1970-01-01
  • 2010-11-01
  • 2012-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多