ฉันกำลังออกแบบแอพที่มีฟังก์ชั่นในการดึงข้อมูล JSON และแสดงรายการของรายการที่ดึงข้อมูลในมุมมองประเภท FileBrowser ในมุมมองนี้ผู้ใช้ควรสามารถคลิกที่โฟลเดอร์เพื่อดำดิ่งลึกลงไปในแผนผังไฟล์หรือคลิกที่ไฟล์เพื่อดูข้อมูลเมตาบางส่วนเกี่ยวกับไฟล์ดังกล่าว
ฉันสังเกตว่าขณะที่สิ่งนี้ใช้งานได้เมื่อฉันคลิกที่ไฟล์หรือโฟลเดอร์จากนั้นย้อนกลับไปคลิกอีกครั้ง NavigationLink ไม่ทำงานและฉันติดอยู่ที่มุมมองจนกว่าฉันจะคลิกไปที่ NavigationLink อื่น
นี่คือ gif ที่แสดงให้เห็นถึงปัญหานี้
เท่าที่เห็นที่นี่เมื่อฉันคลิกที่ BlahBlah ฉันกำลังเปิดใช้งาน NavigationLink และนำไปที่ BlahBlah จากนั้นเมื่อฉันนำทางกลับไปและพยายามที่จะลบล้างไปที่ BlahBlah มันจะกลายเป็นสีเทาลงทะเบียนว่าฉันคลิกที่มัน ... . การคลิกที่ TestFile แก้ไขปัญหานี้และอนุญาตให้ฉันนำทางกลับไปที่ BlahBlah
มีการสร้างไอเท็มรายการด้วยโครงสร้างต่อไปนี้
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)
}
}
}
}
และเรียกดูด้วย navigationLinks ดังนี้
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 ของฉันถูกเตรียมใช้งานในมุมมองด้านบน (แอพมีมุมมองแท็บ) สิ่งต่อไปนี้
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 เป็นโครงสร้างฉันใช้สำหรับการจัดการสีของ navigationBar มันถูกตั้งค่าอย่างนั้น
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)
}
}
}
ฉันไม่คิดว่า NavigationConfigurator ของฉันเป็นต้นเหตุของปัญหานี้หรือไม่ ข้อผิดพลาดนี้เกิดขึ้นในการนำทางลิงค์อื่น ๆ ในแอป แต่มันง่ายที่สุดที่จะแสดงให้เห็นที่นี่ในมุมมอง FileBrowser
นี่อาจเป็นข้อผิดพลาดใน SwiftUI ใช่ไหม หากไม่มีใครรู้วิธีแก้ไขปัญหานี้ ถ้าไม่ใช่ฉันทำอะไรผิด
NavigationLink
ด้านในFileView
ซึ่งเป็นห่อNavigationView
ดังนั้นNavigationLink
ภายในเป็นห่อของNavigationView
cellArray
อย่างไร
NavigationLink
ภายในNavigationView
และลบNavigationView
จากFileView
? ฉันได้เห็นตัวอย่างรอบ ๆ ที่นี่ซึ่งเป็นอย่างนั้น