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

时间:2020-03-09 04:03:10

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

编辑: 我还尝试过处理onTapGesture回调,该回调工作正常,但它代替了List行的默认行为。我如何确保将事件传递到列表,因为这样可能会起作用。

0 个答案:

没有答案