ios - SwiftUI - 为什么当我在 macOS 上更改选项卡时 TabView 及其内容有时不刷新?

标签 ios swift swiftui tabview

我正在尝试使用 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)
        }
    }
}
这是发生的问题的屏幕截图:
And here is a GIF of the issue occurring

最佳答案

这绝对是 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 具有焦点时更改选项卡时,此错误才会显现出来。

如果您对代码进行上述更改,它将按预期工作。

Screen capture of fix working

关于ios - SwiftUI - 为什么当我在 macOS 上更改选项卡时 TabView 及其内容有时不刷新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59450948/

相关文章:

swift - 类型 '()' 不能符合 'View' ;只有 struct/enum/class 类型可以符合使用 swift ui 调用调用函数的协议(protocol)

swift - 更改在特定边上带有边框的功能以也能够适应拐角半径?

ios - 通过RESTful WCF服务从iPhone应用程序访问SQL数据库

ios - ALAssetsLibrary 似乎返回错误数量的照片

ios - 如何阻止我的应用程序中的用户(swift + parse)

swift - 在 Xcode Storyboard中制作可重用组件

ios - 不同 UI 元素的 SwiftUI 列表 - 失败

ios - 当 URL 引用子目录时 NSURLRequest 的奇怪行为

ios - 我们可以从 iOS 版本的应用程序创建 mac 版本吗

ios - 如何使用 Swift 从 UIBezierPath 创建虚线 SKShapeNode?