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保持突出显示,就好像它仍然处于活动状态一样,如所附的屏幕截图所示。老实说,我不知道是什么原因造成的。任何想法或见解都将不胜感激。
onReceive您可以在以下位置使用操作List:
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}\nRun Code Online (Sandbox Code Playgroud)\n这将取消选择选定的行。
\n此解决方法的最初想法归功于 Pivaisan(来自此Apple 开发者线程)。
\n