Saya merancang aplikasi yang mencakup fungsi mengambil data JSON dan menampilkan daftar item yang diambil dalam tampilan jenis FileBrowser. Dalam tampilan ini, pengguna harus dapat mengklik folder untuk menyelam lebih dalam ke pohon file atau klik pada file untuk melihat beberapa metadata tentang file tersebut.
Saya telah mengamati bahwa sementara ini berfungsi, ketika saya mengklik file atau folder kemudian kembali dan mengkliknya lagi, NavigationLink tidak terpicu dan saya terjebak pada tampilan sampai saya mengklik pada NavigationLink yang berbeda.
Berikut adalah gif yang menunjukkan masalah ini.
Seperti yang terlihat di sini, ketika saya mengklik BlahBlah saya mengaktifkan NavigationLink dan dibawa ke BlahBlah, kemudian ketika saya menavigasi kembali dan mencoba untuk renavigate ke BlahBlah, itu menjadi abu-abu, mendaftar bahwa saya mengkliknya ... tetapi kemudian tidak pernah membawa saya ke sana . Mengklik TestFile memperbaiki ini dan memungkinkan saya untuk menavigasi kembali ke BlahBlah.
Daftar item dibuat dengan struct berikut
private struct FileCell{
var FileName: String
var FileType: String
var FileID: String = ""
var isContainer: Bool
}
private struct constructedCell: View{
var FileType: String
var FileName: String
var FileID: String
var body: some View {
return
HStack{
VStack(alignment: .center){
Image(systemName: getImage(FileType: FileType)).font(.title).frame(width: 50)
}
Divider()
VStack(alignment: .leading){
Text(FileName).font(.headline)
.multilineTextAlignment(.leading)
Text(FileID)
.font(.caption)
.multilineTextAlignment(.leading)
}
}
}
}
dan dipanggil dengan navigasiLinks sebagai berikut
List(cellArray, id: \.FileID) { cell in
if (cell.isContainer) {
NavigationLink(destination: FileView(path: "/\(cell.FileID)", displaysLogin: self.$displaysLogin).navigationBarTitle(cell.FileName)){
constructedCell(FileType: cell.FileType, FileName: cell.FileName, FileID: cell.FileID)
}
} else {
NavigationLink(destination: DetailView(FileID: cell.FileID).navigationBarTitle(cell.FileName)){
constructedCell(FileType: cell.FileType, FileName: cell.FileName, FileID: cell.FileID)
}
}
}
NavigationView saya diinisialisasi dalam tampilan di atas (aplikasi memiliki tampilan tab) ini sebagai berikut
TabView(selection: $selection){
NavigationView{
FileView(displaysLogin: self.$displaysLogin)
.navigationBarTitle("Home", displayMode: .inline)
.background(NavigationConfigurator { nc in
nc.navigationBar.barTintColor = UIColor.white
nc.navigationBar.titleTextAttributes = [.foregroundColor : UIColor.black]
})
}
.font(.title)
.tabItem {
VStack {
Image(systemName: "folder.fill")
Text("Files")
}
}
.tag(0)
}
NavigationConfigurator adalah struct yang saya gunakan untuk menangani warna navigationBar. Sudah diatur seperti itu
struct NavigationConfigurator: UIViewControllerRepresentable {
var configure: (UINavigationController) -> Void = { _ in }
func makeUIViewController(context: UIViewControllerRepresentableContext<NavigationConfigurator>) -> UIViewController {
UIViewController()
}
func updateUIViewController(_ uiViewController: UIViewController, context: UIViewControllerRepresentableContext<NavigationConfigurator>) {
if let nc = uiViewController.navigationController {
self.configure(nc)
}
}
}
Saya tidak berpikir NavigationConfigurator saya yang menyebabkan ini? Bug ini juga terjadi di linkLinks lain di aplikasi, tetapi paling mudah untuk menunjukkannya di sini di tampilan FileBrowser.
Ini mungkin bug di SwiftUI? Jika memang ada yang tahu cara untuk mengatasi ini? Jika tidak, apa yang saya lakukan salah?
NavigationLink
dalamnya FileView
yang terbungkus dalam NavigationView
karenanya NavigationLink
dibungkus dalamNavigationView
cellArray
?
NavigationLink
di dalamNavigationView
dan menghapusNavigationView
dariFileView
? Saya telah melihat beberapa contoh di sekitar sini yang melakukannya dengan cara itu.