我有一個串列,其中 navigationLink 目標是一個具有用戶結構系結屬性的視圖。作業正常,如果在詳細視圖中我創建另一個導航鏈接到具有用戶結構的系結屬性的編輯視圖,這將在修改用戶時按預期更新所有視圖。
我的問題是當我不使用詳細視圖中的 navigationLink 而是使用作業表模式時。當我在作業表中更新時,主視圖會更新,而不是作業表,是否有我遺漏的東西?
NavigationView 使用 NavigationLinks 的作業原理:
MasterView (List of Users)
| (NavigationLink)
DetailView(user: $user) this binding works
| (NavigationLink)
EditView(user: $user) this binding works
NavigationView 使用 NavigationLink 進行詳細說明,并使用作業表進行編輯:
MasterView (List of Users)
| (NavigationLink)
DetailView(user: $user) this binding works
| (sheet)
EditView(user: $user) this binding doesn't work
我對開張表的實作如下:
struct UserDetailView: View {
@Binding var user: User
@State private var sheetItem: SheetItem?
var body: some View {
VStack {
// content
}
.toolbar {
ToolbarItem(placement: .navigationBarTrailing) {
Button(action: {
sheetItem = SheetItem(view: AnyView(EditUserView(user: $user)))
}) {
Text("Edit")
}
}
}
.sheet(item: $sheetItem) { view in
showSheet(sheet: view)
}
}
}
struct SheetItem: Identifiable {
var id = UUID()
var view: AnyView
}
func showSheet(sheet: SheetItem) -> some View {
return sheet.view
}
uj5u.com熱心網友回復:
通過遵循@jnpdx 的建議,我能夠通過使用不同的方法來渲染作業表來解決它
struct UserDetailView: View {
@Binding var user: User
@State private var sheetEnum: SheetEnum<SheetType>?
enum SheetType {
case EditUser
}
var body: some View {
VStack {
// content
}
.toolbar {
ToolbarItem(placement: .navigationBarTrailing) {
Button(action: {
sheetEnum = SheetEnum(type: .EditUser)
}) {
Text("Edit")
}
}
}
.sheet(item: $sheetEnum) { sheet in
if sheet.type == .EditUser {
EditUserView(user: $user)
{
}
}
}
struct SheetEnum<T>: Identifiable {
var id = UUID()
var type: T
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/471129.html
