SwiftUI如何检测视图何时具有焦点



我在一个视图中有两个列表,希望能够确定当前有焦点的列表,以便在详细信息面板中显示列表中所选项目的正确详细信息。

以下代码似乎从未被调用过,任何人都可以指出是否有其他正确的方法来确定焦点何时更改。

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值,但如果用户在另一个列表中选择了已经选择的项目,则该值不会更新,但列表和列表项目确实获得了焦点-视觉颜色的变化表明它具有焦点。

编辑:我还尝试过处理onTapGesture回调,它工作得很好,只是它取代了List行的默认行为。我如何确保事件被传递到列表中,因为这可能会起作用。

对焦点做出反应的最简单方法是

struct DummyView: View {
@Environment(.isFocused) var isFocused
var body: some View {
Text("My view")
.padding()
.background(isFocused ? Color.orange : Color.black)
}
}

最新更新