如何取消选择 NavigationLink 中的列表按钮

Posted

技术标签:

【中文标题】如何取消选择 NavigationLink 中的列表按钮【英文标题】:How to deselect a list button within a NavigationLink 【发布时间】:2021-02-25 23:39:02 【问题描述】:

我有一个列表,其中包含 NavigationLink 中的列表项之一,因为一旦点击它就需要移动到详细视图。当我从该详细视图返回时,列表按钮仍处于选中状态。在 SwiftUI 之前,我只是告诉 .isSelected 等于 false,但我不知道如何在 SwiftUI 中做到这一点?

List 
      NavigationLink(destination: SettingsStartdayView())
          HStack 
             Text("Start Day Notification")
             Spacer()
             Text(startDayNotificationSetting)
                 .font(.subheadline)
                 .foregroundColor(Color.gray)
                 .multilineTextAlignment(.trailing)
          
     

Starting List View After Detail View, Back

此视图正在通过以下方式加载到主应用程序的视图中:

NavigationView
            TabView(selection: $isSelectedTab) 
                 SettingsView()
                   .tabItem
                   .tag(1)

这是一个公共项目,其中包含我正在处理的完整示例:https://gitlab.com/jammyman34/test-sounds-project

转到“设置”选项卡,然后单击顶部列表项以转到详细信息页面。请注意当您返回时单击的列表如何保持选中状态。除非您切换到另一个选项卡,否则它不会清除。

【问题讨论】:

你能显示完整的层次结构直到根NavigationView吗? 我编辑了描述,希望能回答您的问题。那是你问的吗@pawello2222 是的,但我认为在这种情况下这还不够。请提供Minimal, Reproducible Example。 @pawello2222 有帮助吗gitlab.com/jammyman34/test-sounds-project 【参考方案1】:

这里的问题是 Text 在 SettingsView 中位于 List 上方 - 报告了一个错误 here。

相反,您可以使用 native 导航标题并将其附加到 TabView。

struct SettingsHomeView: View 
    
    @State var startDayNotificationSetting: String = "8:30AM"
    @State var appVersion: String = "0.01"
    
    var body: some View 
        // no `Text` above `List`
        List 
            NavigationLink(destination: SettingsStartdayView())
                HStack 
                    Text("Start Day Notification")
                    Spacer()
                    Text(startDayNotificationSetting)
                        .font(.subheadline)
                        .foregroundColor(Color.gray)
                        .multilineTextAlignment(.trailing)
                    //Image(systemName: "chevron.right")
                
            
        
    

struct ContentView: View 
    
    @State private var isSelectedTab = 1 // select the first tab
    
    var body: some View 
        NavigationView
            TabView(selection: $isSelectedTab) 
                // ...
            
            // control displaying the title depending on the `isSelectedTab`
            .navigationTitle("Settings")
            .navigationBarHidden(isSelectedTab == 1)
        
    

【讨论】:

以上是关于如何取消选择 NavigationLink 中的列表按钮的主要内容,如果未能解决你的问题,请参考以下文章

如何仅取消选择网格中的某些行?

由于用户选择,当列改变位置时,在Shiny中取消选择DT :: formatRound中的列

如何通过取消旋转标题行来转置Excel中的列[重复]

如何在 SwiftUI 列表行中独立选择复选框按钮和 NavigationLink 到另一个视图

如何在 Amazon Redshift 的列中取消嵌套/展开/展平逗号分隔值?

SwiftUI List 在 Sheet 中的外观和行为与在 NavigationLink 中不同