使用非默认键盘的SwiftUI TextField不会更新绑定值

时间:2020-09-20 17:06:47

标签: ios keyboard swiftui textfield

我正在使用TextField 更新我的应用程序模型中的数值。编辑值的页面从NavigationView触发。当我使用默认键盘时,一切正常,例如:

TextField("Enter a number", value: $userData.chosenNumber, formatter: NumberFormatter())
    .keyboardType(.default)

在按下Return键时将更新userData.chosenNumber的值,并且此更改将反映在主导航屏幕上(userDataEnvironmentObject)。

但是,使用.keyboardType(.numberPad)的相同代码将不会显示Return键,并且导航回主视图时不会更新userData.chosenNumber。这在模拟器和设备上均会发生(但是使用SwiftUI实时预览或按物理键盘上的Return键时,在模拟器中可以正常工作)。

是否有一种方法可以获取新值而无需使用默认键盘?

-编辑-

基于pawello2222在评论中的建议,我尝试了this other SO的问题的解决方案,但在我的情况下无法完全解决问题。

另一个问题是什么:引入Binding<String>(通过计算属性),充当我要修改的值和UI中显示的字符串之间的中间位置。

  • 这可以修改视图中的值。
  • 但是,运行时无法检测到父视图注入的EnvironmentObject已被修改,因此离开视图后,应用程序UI不会刷新,其他视图也不会更新。

(在某些情况下,我的应用程序根据储气罐位置和潜水员的空气消耗量来计算潜水员的停留时间。详细视图用于编辑潜水员的空气消耗量,而另一个视图则显示最终的停留时间。因此我的情况是潜水员的消费量得到了更新,但与标准键盘不同,下潜时间没有得到更新。)

0 个答案:

没有答案