আমি এমন একটি অ্যাপ্লিকেশন ডিজাইন করছি যা জেএসওএন ডেটা পুনরুদ্ধার এবং একটি ফাইল ব্রাউজার টাইপ ভিউতে পুনরুদ্ধার করা আইটেমের একটি তালিকা প্রদর্শন করার কাজ অন্তর্ভুক্ত। এই দৃশ্যে, কোনও ব্যবহারকারীকে ফাইলের গাছে আরও গভীরভাবে ডুব দেওয়ার জন্য কোনও ফোল্ডারে ক্লিক করতে বা উক্ত ফাইল সম্পর্কে কিছু মেটাডেটা দেখতে কোনও ফাইলে ক্লিক করতে সক্ষম হওয়া উচিত।
আমি পর্যবেক্ষণ করেছি যে এটি কাজ করার সময় আমি যখন কোনও ফাইল বা ফোল্ডারে ক্লিক করি তখন ফিরে গিয়ে আবার এটিতে ক্লিক করুন, নেভিগেশনলিঙ্কটি ট্রিগার হয় না এবং আমি ভিন্ন নেভিগেশন লিঙ্কটিতে ক্লিক না করা পর্যন্ত আমি দৃশ্যে আটকে থাকি।
এই সমস্যাটি দেখানোর জন্য একটি জিআইএফ এখানে রয়েছে।
এখানে যেমন দেখা গেছে, আমি যখন ব্লাহব্লাহ ক্লিক করি তখন আমি নেভিগেশনলিংকটি চালু করে ব্লাহব্লায় নিয়ে যাই, তখন আমি যখন আবার নেভিগেট করি এবং ব্লেব্লাহে পুনর্নির্মাণের চেষ্টা করি, তখন এটি ধূসর হয়ে যায়, আমি এখানে ক্লিক করে নিবন্ধ করি ... তবে তারপরে কখনও আমাকে সেখানে স্থানান্তরিত করে না । টেস্টফাইলে ক্লিক করা এটি ঠিক করে এবং আমাকে আবার ব্লাহব্লাহে নেভিগেট করতে দেয়।
তালিকা আইটেম নিম্নলিখিত স্ট্রাক্ট দিয়ে তৈরি করা হয়
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)
}
}
}
আমি মনে করি না আমার নেভিগেশন কনফিগ্রেটারটি এর কারণ করছে? এই বাগ অ্যাপ্লিকেশনটিতে অন্যান্য নেভিগেশনলিংকের ক্ষেত্রেও ঘটে, তবে ফাইলব্রোজার দর্শনে এখানে এটি প্রদর্শন করা সবচেয়ে সহজ ছিল।
এটি SwiftUI এ একটি বাগ হতে পারে? যদি হয় তবে কেউ কি এটিকে ঘিরে কাজ করার কোনও উপায় জানেন? যদি তা না হয় তবে আমি কী ভুল করছি?
NavigationLinkভেতরে FileViewযা জড়িয়ে রাখা হয়েছে NavigationViewতাই NavigationLinkএকটি এর আবৃত করা হয় ভিতরেNavigationView
cellArray?

NavigationLinkএকটি ভিতরেNavigationViewএবং অপসারণNavigationViewথেকেFileView? আমি প্রায় কাছাকাছি কিছু উদাহরণ দেখেছি যা এটি সেভাবে করে।