为什么在 TextField 键盘中输入每个字母后关闭以及如何更好地修复它?

Why after each entered letter in TextField keyboard closes and how to fix it better?

我的父视图和子视图都有 ObservableObject:

import Parchment

class MainViewModel: ObservableObject {
    @Published var inputText = String()

    init() {}
}

struct ChildView: View {
    @EnvironmentObject var viewModel: MainViewModel

    var body: some View {
          PageView(/**/) {
          TextField("", $viewModel.inputText)
}
}
    }
}

我尝试将 inputText 放入子视图的 ObservedObject 但没有任何变化。

当我输入一个字母时,键盘关闭。我认为 SwiftUI 开始重绘整个页面,因此 TextField 变得不活动。

如何解决这个问题?也许以某种方式强制激活 TextField,或者启动键盘?

您当前的代码无法在我的 Parchment 和 SwiftUI 的 2.4.0 版本上编译,因此我尝试推断各种细节 - 该代码在本机 SwiftUI 组件中运行良好。我会考虑重新构建代码,以便 @Published 属性 引用模型对象 - 这是更好的 SoC 并且可以更好地共享(鉴于你的 EnvironmentObject 我怀疑你正在通过此视图模型到多个视图)。

如@Asperi 所述,Parchment 并不理想。 PageView 包装了一个 UIViewController 作为分页控制器,每个页面都嵌套在另一个 UIHostingController 中!更好的方法是使 PagingController 为符合 UIViewControllerRepresentable 的场景包装 UIPageViewController,使用 UIViewControllers。我会从头开始实现这个而不是使用 Parchment - 它可能有点过分,也许某些方面可以设计得更好。

我可能遗漏了一些东西,但如果没有上下文中的进一步代码,很难提供帮助。此外,根据您的示例,在父视图中设置 PageView 更有意义,并且您在父视图控制器中的子视图不应捕获触摸(在 UIKit 或视图修饰符 .disabled(true) 中将 userInteractionEnabled 设置为 false在 SwiftUI 中)。这是如果 ParentView 覆盖在 ChildView.

之上