我正在尝试使用 SwiftUI 在 macOS 上创建一个选项卡式应用程序,但我遇到了一个奇怪的问题 TabView
.
当我有两个带有 TextField
的标签时s 每个并将它们的文本状态保存到它们各自的私有(private)变量中,奇怪的事情发生了:当我从 切换时标签 A 至标签 B 将文本输入 后标签 A 的TextField
,标签指示器显示我仍在 标签 A ,但内容显示标签 B 的内容。当我单击 的按钮时标签 B 再一次,它仍然会显示 标签 B 的内容。此外,当我按下 的按钮时标签 A 之后会显示的内容标签 A ,但标签的指示器仍然显示我在 标签 B .
我可能做错了什么?
这是一个说明我的问题的示例:
import SwiftUI
struct ContentView: View {
var body: some View {
TabView
{
TabAView()
.tabItem({Text("Tab A")})
TabBView()
.tabItem({Text("Tab B")})
}
}
}
struct TabAView: View {
@State private var text = ""
var body: some View {
VStack{
Text("Tab A")
TextField("Enter", text: $text)
}
}
}
struct TabBView : View {
@State private var text = ""
var body: some View {
VStack {
Text("Tab B")
TextField("Enter", text: $text)
}
}
}
这是发生的问题的屏幕截图:最佳答案
这绝对是 SwiftUI 的 TabView 实现中的一个 bug。但是您可以通过绑定(bind)到 TabView 选择并手动设置当前选项卡来轻松解决该问题,如下所示:
struct ContentView: View {
@State private var currentTab = 0
var body: some View {
TabView(selection: $currentTab)
{
TabAView()
.tabItem({Text("Tab A")})
.tag(0)
.onAppear() {
self.currentTab = 0
}
TabBView()
.tabItem({Text("Tab B")})
.tag(1)
.onAppear() {
self.currentTab = 1
}
}
}
}
只有当用户在 TextField 具有焦点时更改选项卡时,此错误才会显现出来。
如果您对代码进行上述更改,它将按预期工作。
关于ios - SwiftUI - 为什么当我在 macOS 上更改选项卡时 TabView 及其内容有时不刷新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59450948/