ios - 返回上一个视图后,SwiftUI NavigationLink 突出显示保持突出显示
问题描述
我在 SwiftUI 中有一系列视图。一种是“菜单视图”,它由封装在 NavigationView 中的NavigationLinks列表组成。
代码如下。
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")
}
}
}
}
}
设置视图如下
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])
}
}
}
}
最后,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)
}
}
}
}
我遇到的问题是,当应用程序从VoiceList视图返回到Settings视图时,NavigationLink仍然突出显示,就好像它仍然处于活动状态一样,如随附的屏幕截图所示。老实说,我不知道是什么原因造成的。非常感谢任何想法或见解。
解决方案
您可以onReceive
对List
:
List {
…
}.onReceive(NotificationCenter.default.publisher(for: UITableView.selectionDidChangeNotification)) {
guard let tableView = $0.object as? UITableView,
let selectedRow = tableView.indexPathForSelectedRow else { return }
tableView.deselectRow(at: selectedRow, animated: true)
}
这将取消选择选定的行。
此解决方法的最初想法归功于 Pivaisan(来自此Apple Developer thread)。
推荐阅读
- c# - 在 WPF MVVM 中更改 ComboBox 选定项的文本颜色
- sql - SQL:检查列是否包含来自另一个 SELECT 语句的值
- node.js - eslint 为 2 个文件夹配置相同,但 linting 不同
- c++ - Vector中数字常量之前的预期标识符
- java - 将不同布局中的 textView 设置为 EditText 的值
- django - 如何在 django 中访问多对多模型字段
- erlang - 之前的 Erlang 语法错误:第 55 行中的 'end'
- javascript - Chart.js,未捕获类型错误:无法设置未定义的属性“0”
- c - C语言中的MPI数据广播与否
- python - 在 Python 中,为什么 GraphQL 枚举值显示为 null?