Ios 具有非默认键盘的SwiftUI文本字段不更新绑定值

Ios 具有非默认键盘的SwiftUI文本字段不更新绑定值,ios,keyboard,swiftui,textfield,Ios,Keyboard,Swiftui,Textfield,我正在使用TextField更新我的应用程序模型中的数值。编辑值的页面由导航视图触发。当我使用默认键盘时,一切正常,即: TextField("Enter a number", value: $userData.chosenNumber, formatter: NumberFormatter()) .keyboardType(.default) 当按下返回键时,将更新userData.chosenNumber的值,此更改将反映在主导航屏幕上(userData是一个E

我正在使用
TextField
更新我的应用程序模型中的数值。编辑值的页面由
导航视图触发。当我使用默认键盘时,一切正常,即:

TextField("Enter a number", value: $userData.chosenNumber, formatter: NumberFormatter())
    .keyboardType(.default)
当按下返回键时,将更新
userData.chosenNumber
的值,此更改将反映在主导航屏幕上(
userData
是一个
EnvironmentObject

但是,使用
.keyboardType(.numberPad)
的同一代码将不会显示返回键,
userData.chosenNumber
在导航回主视图时不会更新。这在模拟器和实时设备中都会发生(但使用SwiftUI live preview或在点击物理键盘返回键时在模拟器中的工作情况与预期一样)

有没有一种方法可以在不使用默认键盘的情况下获取新值

--编辑--

根据苏在评论中的建议,我尝试了苏的问题的解决方案,但在我的案例中没有完全奏效

另一个问题的建议是:引入一个
绑定
(通过计算属性),它充当我要修改的值和UI中显示的字符串之间的中间值

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

(在某些情况下,我的应用程序会根据储气罐位置和潜水员的空气消耗量计算潜水员的底部时间。细节视图用于编辑潜水员的空气消耗量值,而另一个视图显示生成的底部时间。因此,在我的情况下,潜水员的消耗量会得到更新,但底部时间不会收到更新,这与h这能回答你的问题吗?

谢谢!看起来确实相关。解决方法似乎很有趣。不过,很多类似代码的“样板”看起来苹果至少应该将其记录为一个已知问题。我尝试了“计算属性”方法在接受的答案中。它允许我在细节视图中获得更新的值,但未检测到环境对象正在更改,因此其他视图中的依赖值未更新。如果您的问题仍然没有解决,您可以随时更新您的问题。完成,谢谢!我在这里落后,这是我在wee期间做的一个附带项目肯兹/不眠之夜。