为什么在TextField键盘中输入的每个字母关闭后,如何更好地对其进行修复?

时间:2020-06-08 11:38:09

标签: ios swift swiftui parchment

对于父视图和子视图,我都有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或启动键盘?

1 个答案:

答案 0 :(得分:1)

您当前的代码无法在我的newlst的2.4.0版本和SwiftUI上编译,因此我尝试推断各种细节-该代码在本机SwiftUI组件中可以正常工作。我会考虑重新构建代码,以便Parchment属性引用一个Model对象-这是更好的SoC,可以更好地共享(鉴于您的@Published我怀疑您正在将此视图模型传递给多个视图)。

如@Asperi所述,羊皮纸并不理想。 EnvironmentObject包装了一个PageView作为分页控制器,并且每个页面都嵌套在另一个UIViewController中!更好的方法是使用UIHostingControllerPagingController封装为UIPageViewController的场景包装为UIViewControllerRepresentable。与使用羊皮纸相比,我只是从头开始实现这一点-这可能是过大的,也许某些方面可以设计得更好。

我可能会缺少一些东西,但是如果没有上下文的进一步代码,很难提供帮助。同样,从您的示例中,在父视图中设置UIViewController更有意义,并且父视图控制器中的子视图不应捕获触摸(在UIKit或View修饰符PageView中将userInteractionEnabled设置为false在SwiftUI中)。如果.disabled(true)被覆盖在ParentView的顶部。