JSON verilerini alma ve bir FileBrowser türü görünümünde alınan öğelerin bir listesini görüntüleme işlevini içeren bir uygulama tasarlıyorum. Bu görünümde, kullanıcı dosya ağacına daha derinlemesine dalmak için bir klasörü veya söz konusu dosyayla ilgili bazı meta verileri görüntülemek için bir dosyayı tıklayabilmelidir.
Bu çalışırken, bir dosya veya klasörü tıklayıp sonra geri dönüp tekrar tıkladığımda, NavigationLink'in tetiklenmediğini ve farklı bir NavigationLink'i tıklayana kadar görünümde sıkıştığımı gözlemledim.
İşte bu sorunu gösteren bir gif.
Burada görüldüğü gibi, BlahBlah'ı tıkladığımda, NavigationLink'i etkinleştiriyorum ve BlahBlah'a götürüyorum, o zaman geri dönüp BlahBlah'a yeniden gitmeye çalıştığımda gri oluyor, üzerine tıkladığımı kaydederek ... . TestFile'a tıklamak bunu düzeltir ve BlahBlah'a geri dönmemi sağlar.
Liste öğeleri aşağıdaki yapılarla yapılır
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)
}
}
}
}
ve aşağıdaki gibi navigationLinks ile görünüme çağrıldı
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)
}
}
}
My NavigationView yukarıdaki görünümde başlatıldı (uygulamanın sekme görünümü var) bu aşağıdaki gibi
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 rengini işlemek için kullandığım bir yapıdır. Bu şekilde kurulmuş
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)
}
}
}
Benim NavigationConfigurator buna neden olduğunu sanmıyorum? Bu hata, uygulamadaki diğer navigasyon bağlantılarında da olur, ancak burada FileBrowser görünümünde göstermek en kolay yoldur.
Bu SwiftUI'de bir hata olabilir mi? Eğer öyleyse, kimse bu sorunu çözmek için bir yol biliyor mu? Değilse, neyi yanlış yapıyorum?
NavigationLink
İçinde olan FileView
bir sarılmış olan NavigationView
, bu nedenle NavigationLink
, bir sarılmış olan içNavigationView
cellArray
?
NavigationLink
bir içNavigationView
ve kaldırmakNavigationView
gelenFileView
? Buralarda bunu yapan bazı örnekler gördüm.