SwiftUI NavigationLink 突出显示返回上一视图后保持突出显示

Pet*_*obs 4 ios swiftui swiftui-list swiftui-navigationlink swiftui-navigationview

我对SwiftUI有一系列的看法。一种是“菜单视图”,它由包装在导航视图中的导航链接列表组成

代码如下。

var body: some View {
        NavigationView {
            List {
                HStack {
                    NavigationLink(destination: History(), isActive: $isHistoryViewActive) {
                    Image(systemName: "clock")                        
                    Text("History")                    
                    }
                }
                
                HStack {
                    NavigationLink(destination: Settings(), isActive: $isSettingsActive) {
                        Image(systemName: "gear")
                        Text("Settings")
                    }
                }
                
                HStack {
                    Image(systemName: "info.circle.fill")
                    Button(action: {
                        ...
                    }) {
                        Text("My Button")
                    }
                }
            }
        }
   }
Run Code Online (Sandbox Code Playgroud)

设置视图如下

var body: some View {
     List {
        ...
        Section(header: "Background Music") {
           Toggle("Play", isOn: $isBackGroundMusicOn)
        }
           
        Section(header: "Voice Setting") {
           HStack {
              NavigationLink(destination: VoiceList() {
                 Text(self.voiceNames[self.selectedVoice])
           }
        }
     }
}
Run Code Online (Sandbox Code Playgroud)

最后,VoiceList视图如下:

var body: some View {
        List {
            ForEach(0 ..< VoiceList.voiceNames.count) {voiceIndex in
                HStack {
                    Button(action: {
                        voiceChanged(selectedVoice: voiceIndex)
                    }){
                        Text(VoiceList.voiceNames[voiceIndex])
                    }
                    Spacer()
                    Image(systemName: "checkmark")
                        .frame(alignment: .trailing)
                        .foregroundColor(.blue)
                        .isHidden(hidden: voiceIndex != selectedVoice)
                }
            }
        }
}
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是,当应用程序从VoiceList视图返回到“设置”视图时,NavigationLink保持突出显示,就好像它仍然处于活动状态一样,如所附的屏幕截图所示。老实说,我不知道是什么原因造成的。任何想法或见解都将不胜感激。

在此输入图像描述

Kor*_*tor 6

onReceive您可以在以下位置使用操作List

\n
List {\n    \xe2\x80\xa6\n}.onReceive(NotificationCenter.default.publisher(for: UITableView.selectionDidChangeNotification)) {\n    guard let tableView = $0.object as? UITableView,\n          let selectedRow = tableView.indexPathForSelectedRow else { return }\n\n    tableView.deselectRow(at: selectedRow, animated: true)\n}\n
Run Code Online (Sandbox Code Playgroud)\n

这将取消选择选定的行。

\n

此解决方法的最初想法归功于 Pivaisan(来自此Apple 开发者线程)。

\n