Tôi đang thiết kế một ứng dụng bao gồm chức năng truy xuất dữ liệu JSON và hiển thị danh sách các mục được truy xuất trong chế độ xem loại FileBrowser. Theo quan điểm này, người dùng sẽ có thể nhấp vào thư mục để đi sâu hơn vào cây tệp hoặc nhấp vào tệp để xem một số siêu dữ liệu về tệp đã nói.
Tôi đã quan sát thấy rằng trong khi điều này đang hoạt động, khi tôi nhấp vào một tệp hoặc thư mục rồi quay lại và nhấp vào nó một lần nữa, NavigationLink không được kích hoạt và tôi bị kẹt trên màn hình cho đến khi tôi nhấp vào một NavigationLink khác.
Đây là một gif chứng minh vấn đề này.
Như đã thấy ở đây, khi tôi nhấp vào BlahB nhớ, tôi đang kích hoạt Điều hướng Liên kết và đưa đến BlahB nhớ, sau đó khi tôi điều hướng trở lại và cố gắng đổi tên thành BlahBlah, nó sẽ chuyển sang màu xám, nhưng sau đó tôi không bao giờ chuyển tôi đến đó ... . Nhấp vào TestFile sẽ khắc phục điều này và cho phép tôi điều hướng trở lại BlahB nhớ.
Các mục danh sách được thực hiện với các cấu trúc sau
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)
}
}
}
}
và được gọi vào xem với navigationLinks như sau
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)
}
}
}
Điều hướng của tôi được khởi tạo trong chế độ xem ở trên (ứng dụng có chế độ xem tab) như sau
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 là một cấu trúc tôi sử dụng để xử lý màu của navigationBar. Nó được thiết lập như vậy
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)
}
}
}
Tôi không nghĩ NavigationConfigurator của tôi gây ra điều này? Lỗi này cũng xảy ra trong các điều hướng liên kết khác trong ứng dụng, nhưng dễ nhất là thể hiện nó ở đây trong chế độ xem FileBrowser.
Đây có thể là một lỗi trong SwiftUI? Nếu có ai biết một cách để làm việc này không? Nếu không, tôi đang làm gì sai?
NavigationLink
bên trong FileView
được bọc trong NavigationView
do đó NavigationLink
được bọc bên trongNavigationView
cellArray
như thế nào
NavigationLink
bên trongNavigationView
và loại bỏNavigationView
khỏiFileView
? Tôi đã thấy một số ví dụ xung quanh đây làm điều đó theo cách đó.