首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SwiftUI -表单中的NavigationLink单元格在弹出详细信息后保持突出显示

SwiftUI -表单中的NavigationLink单元格在弹出详细信息后保持突出显示
EN

Stack Overflow用户
提问于 2020-09-17 16:21:17
回答 10查看 5.2K关注 0票数 36

在iOS 14中,在Form上下文中返回后,NavigationLink似乎没有被取消选择。这也适用于Form Picker以及任何其他导致显示列表中的另一个View的内容(为显示的单元格提供突出显示上下文)。

我在iOS 13中没有注意到这个行为。

有没有一种方法可以在另一个视图关闭后取消选择突出显示的行?

示例代码:

代码语言:javascript
复制
struct ContentView: View {

    var body: some View {
        Form {
            NavigationLink(destination: Text("Detail")) {
                Text("Link")
            } 
        }
    }

}

(不同)视觉示例:

EN

Stack Overflow用户

发布于 2021-01-19 17:20:29

这肯定是List中的一个错误,目前,我的解决方法是通过更改id来刷新List,如下所示:

代码语言:javascript
复制
struct YourView: View {
    @State private var selectedItem: String?
    @State private var listViewId = UUID()

    var body: some View {
            List(items, id: \.id) {
                NavigationLink(destination: Text($0.id), 
                               tag: $0.id, 
                               selection: $selectedItem) {
                  Text("Row \($0.id)")
                }
            }
            .id(listViewId)
            .onAppear {
                if selectedItem != nil {
                    selectedItem = nil
                    listViewId = UUID()
                }
            }
    } 
}

我根据这一点做了一个修饰符,你可以使用:

代码语言:javascript
复制
struct RefreshOnAppearModifier<Tag: Hashable>: ViewModifier {
    @State private var viewId = UUID()
    @Binding var selection: Tag?
    
    func body(content: Content) -> some View {
        content
            .id(viewId)
            .onAppear {
                if selection != nil {
                    viewId = UUID()
                    selection = nil
                }
            }
    }
}

extension View {
    func refreshOnAppear<Tag: Hashable>(selection: Binding<Tag?>? = nil) -> some View {
        modifier(RefreshOnAppearModifier(selection: selection ?? .constant(nil)))
    }
}

像这样使用它:

代码语言:javascript
复制
List { ... }
  .refreshOnAppear(selection: $selectedItem)
票数 6
EN
查看全部 10 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63934037

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档