因此,如here所述,在SwiftUI中处理可选绑定时可以使用一些选项。起初,对我来说似乎还可以,但是如果我滚动例如TextField(不可见TextField)并向后滚动,则将删除TextFIeld中的值。与DatePickers相同。如果您在窗体中有选择器,并且当您从可选绑定项中返回值时,将您“重定向”到选择屏幕,也会发生同样的情况。自iOS 14.0发布以来,我已经注意到了这一点。因此,如果有人可以确认这是一个错误或我做错了什么?
以下是我的代码中的一些摘要:
@ObservedObject var item:Item //在视图中声明的属性,Item是CoreData对象,其中所有属性都是可选的
对于我使用的解决方案:
extension Optional where Wrapped == String
{
var _bound: String?
{
get
{
return self
}
set
{
self = newValue
}
}
public var bound: String
{
get
{
return _bound ?? ""
}
set
{
_bound = newValue.isEmpty ? nil : newValue
}
}
}
TextField的声明如下:
Form
{
Section
{
TextField("Enter item name - required", text: $item.name.bound)
// next is a Picker where you get redirected to selection screen as it is inside form
// more elements below that makes form too big so it is scrollable
}
}
表单也包装在ZStack和Navigation视图中,但是我要粘贴的代码太多了。
重现步骤:使用具有@Published属性的对象进行视图,将其设置为视图中的属性。让该对象具有可选属性,例如字符串,日期,... 以相同的形式使Picker具有一些选项。 运行core并在TextFIeld中键入内容,然后点按选择器(您将重定向到选择视图),然后为选择器选择新值。您将被重定向回,并且TextField在所有其他可选的绑定视图(DatePicker,...)中为空。