मैं एक ऐप डिज़ाइन कर रहा हूं जिसमें JSON डेटा प्राप्त करने और FileBrowser प्रकार के दृश्य में पुनर्प्राप्त आइटम की सूची प्रदर्शित करने का कार्य शामिल है। इस दृश्य में, उपयोगकर्ता को फ़ाइल ट्री में गहराई से गोता लगाने के लिए एक फ़ोल्डर पर क्लिक करने में सक्षम होना चाहिए या फ़ाइल के बारे में कुछ मेटाडेटा देखने के लिए फ़ाइल पर क्लिक करना चाहिए।
मैंने देखा है कि जब यह काम कर रहा है, जब मैं किसी फ़ाइल या फ़ोल्डर पर क्लिक करता हूं तो वापस जाएं और फिर से उस पर क्लिक करें, नेविगेशनलिंक ट्रिगर नहीं होता है और जब तक मैं एक अलग नेविगेशनलिंक में क्लिक नहीं करता तब तक मैं दृश्य पर अटका हुआ हूं।
यहाँ इस समस्या का प्रदर्शन gif है।
जैसा कि यहां देखा गया है, जब मैं ब्लाहबल्लाह पर क्लिक करता हूं तो मैं नेविगेशनलिंक को सक्रिय कर रहा हूं और ब्लाहबल्लाह को ले जाया जाता हूं, फिर जब मैं वापस नेविगेट करता हूं और ब्लाहबला को फिर से स्थापित करने का प्रयास करता हूं, तो यह ग्रे हो जाता है, यह दर्ज करते हुए कि मैं उस पर क्लिक करता हूं ... लेकिन फिर मुझे वहां स्थानांतरित नहीं करता है। । 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)
}
}
}
}
और नेविगेशनलिंक के साथ दृश्य में निम्नानुसार बुलाया
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)
}
}
}
मेरा नेविगेशन दृश्य ऊपर के दृश्य में आरंभीकृत है (ऐप का एक टैब दृश्य है) इस प्रकार है
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)
}
नेविगेशनकॉन्फिगरेटर एक संरचना है जिसका उपयोग मैं नेविगेशनबार के रंग को संभालने के लिए करता हूं। इसे ऐसे ही सेट किया जाता है
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)
}
}
}
मुझे नहीं लगता कि मेरा नेविगेशनकॉन्फिगरेटर इसका कारण बन रहा है? यह बग ऐप में अन्य नेविगेशनलिंक्स में भी होता है, लेकिन फाइलब्रोसर दृश्य में इसे यहां प्रदर्शित करना सबसे आसान था।
यह स्विफ्टयूआई में एक बग हो सकता है? अगर यह किसी को इस के आसपास काम करने का एक तरीका पता है? यदि ऐसा नहीं है, तो मैं क्या गलत कर रहा हूँ?
NavigationLink
के अंदर है FileView
जो एक में लपेटा जाता है NavigationView
इसलिए NavigationLink
एक की लपेटा जाता है के अंदरNavigationView
cellArray
?
NavigationLink
अंदर नहीं लपेटना चाहिएNavigationView
और किससेNavigationView
दूर करना चाहिएFileView
? मैंने यहाँ कुछ उदाहरण देखे हैं जो इस तरह से करते हैं।