您好,當我切換布林值時,我的視圖重繪 有問題。這是代碼
class MyItem: Identifiable {
@Published var isActive: Bool
}
struct myView: View {
@Binding var item: MyItem
var body: some View {
HStack {
Toggle("", isOn: $item.isActive)
Spacer()
TextField("", text: item.isActive ? $text : .constant("")) { isFocused in
guard !isFocused && text.count == 0 else { return }
item.isActive.toggle
}
.background(item.isActive ? Color.white : Color.clear)
}
}
}
當我失去焦點并item.isActive.toggle正確運行它時,會更改他的值,但我Toggle和我TextField的用戶界面沒有更新(切換仍然處于活動狀態,TextField 的背景仍然是白色)
知道我缺少什么嗎?
uj5u.com熱心網友回復:
Binding僅在更新包裝值時更新視圖。但是,由于您的包裝值是一個類,而不是一個struct,視圖只會在您將實體替換為另一個實體時更新,而不是在您更新實體的屬性時更新。
您需要在您的視圖上使用或MyItem符合ObservableObject并使用它,然后它將正確更新。@ObservedObject@StateObject
class MyItem: ObservableObject {
@Published var isActive: Bool
}
struct myView: View {
@ObservedObject private var item: MyItem
init(item: MyItem) {
self.item = item
}
var body: some View {
HStack {
Toggle("", isOn: $item.isActive)
Spacer()
TextField("", text: item.isActive ? $text : .constant("")) { isFocused in
guard !isFocused && text.count == 0 else { return }
item.isActive.toggle
}
.background(item.isActive ? Color.white : Color.clear)
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/489119.html
