我在视图中有两个列表,并且希望能够确定哪个列表当前具有焦点,以便在详细信息面板中显示列表中所选项目的正确详细信息。
以下代码似乎从未被调用过,任何人都可以指出是否存在另一种确定焦点何时改变的正确方法。
struct StoreList: View {
@EnvironmentObject private var database: Database
@Binding var selectedStore: Store?
var body: some View {
List(selection: $selectedStore) {
ForEach(database.stores, id: \.self) { store in
StoreRow(store: store).tag(store)
.focusable(true, onFocusChange: { isFocused in
print("focus changed")
if isFocused {
self.database.selectedType = .store
}
})
}
}
.focusable(true, onFocusChange: { isFocused in
print("focus changed")
if isFocused {
self.database.selectedType = .store
}
})
}
}
同时,由于用户需要单击列表中的某个项目才能移动焦点,因此我将探索检测鼠标在“行”上的点击情况。
当前,我在视图模型(数据库)中更改某项(即$ selectedStore)时设置selectedType值,但是如果用户在另一个列表中选择了已选择的项,则该值不会得到更新,但是List和列表项确实获得了焦点-可见的颜色变化表明它具有焦点。
编辑: 我还尝试过处理onTapGesture回调,该回调工作正常,但它代替了List行的默认行为。我如何确保将事件传递到列表,因为这样可能会起作用。