提问者:小点点

为什么在文本字段中每输入一个字母后,键盘就会关闭,如何更好地修复它?


父视图和子视图有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开始重绘整个页面,并且因为这个文本字段变得不活动。

怎么解决这个问题? 也许以某种方式强制激活文本字段,或者启动键盘?


共1个答案

匿名用户

您当前的代码没有在我的parchment2.4.0版本和SwiftUI上编译,因此我尝试推断各种细节--该代码在本机SwiftUI组件中运行良好。 不过,我会考虑重新设计代码架构,以便@published属性引用一个模型对象--这是更好的SoC,允许更好地共享(鉴于您的EnvironmentObject,我怀疑您正在将此视图模型传递给多个视图)。

羊皮纸并不像@Asperi所说的那样理想。 PageView包装一个UIViewController作为分页控制器,每个页面都嵌套在另一个UIHostingController中! 更好的方法是使PagingController成为符合UIViewControllerRepresentable的场景的包装的UIPageViewController,并使用UIViewController。 我只是从头开始实现这一点,而不是使用羊皮纸--这可能是过度的,也许某些方面可以设计得更好。

我可能漏掉了一些东西,但是如果没有上下文中的进一步代码,就很难帮上忙。 另外,从您的示例来看,在父视图中设置PageView更有意义,并且您在父视图控制器中的子视图不应捕获触摸(在UIKit中将UserInteractionEnabled设置为false,或者在SwiftUI中将视图修饰符.Disabled(true))。 如果parentview覆盖在childview之上,则会出现这种情况。