পূর্বে ক্লিক করা নেভিগেশন লিঙ্কটি সুইফটউআইতে পুনরায় দেখার চেষ্টা করার সময় নেভিগেশনলিঙ্ক হিমশীতল


10

আমি এমন একটি অ্যাপ্লিকেশন ডিজাইন করছি যা জেএসওএন ডেটা পুনরুদ্ধার এবং একটি ফাইল ব্রাউজার টাইপ ভিউতে পুনরুদ্ধার করা আইটেমের একটি তালিকা প্রদর্শন করার কাজ অন্তর্ভুক্ত। এই দৃশ্যে, কোনও ব্যবহারকারীকে ফাইলের গাছে আরও গভীরভাবে ডুব দেওয়ার জন্য কোনও ফোল্ডারে ক্লিক করতে বা উক্ত ফাইল সম্পর্কে কিছু মেটাডেটা দেখতে কোনও ফাইলে ক্লিক করতে সক্ষম হওয়া উচিত।

আমি পর্যবেক্ষণ করেছি যে এটি কাজ করার সময় আমি যখন কোনও ফাইল বা ফোল্ডারে ক্লিক করি তখন ফিরে গিয়ে আবার এটিতে ক্লিক করুন, নেভিগেশনলিঙ্কটি ট্রিগার হয় না এবং আমি ভিন্ন নেভিগেশন লিঙ্কটিতে ক্লিক না করা পর্যন্ত আমি দৃশ্যে আটকে থাকি।

এই সমস্যাটি দেখানোর জন্য একটি জিআইএফ এখানে রয়েছে।

ডাবল ট্যাপ বাগ

এখানে যেমন দেখা গেছে, আমি যখন ব্লাহব্লাহ ক্লিক করি তখন আমি নেভিগেশনলিংকটি চালু করে ব্লাহব্লায় নিয়ে যাই, তখন আমি যখন আবার নেভিগেট করি এবং ব্লেব্লাহে পুনর্নির্মাণের চেষ্টা করি, তখন এটি ধূসর হয়ে যায়, আমি এখানে ক্লিক করে নিবন্ধ করি ... তবে তারপরে কখনও আমাকে সেখানে স্থানান্তরিত করে না । টেস্টফাইলে ক্লিক করা এটি ঠিক করে এবং আমাকে আবার ব্লাহব্লাহে নেভিগেট করতে দেয়।

তালিকা আইটেম নিম্নলিখিত স্ট্রাক্ট দিয়ে তৈরি করা হয়

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একটি ভিতরে NavigationViewএবং অপসারণ NavigationViewথেকে FileView? আমি প্রায় কাছাকাছি কিছু উদাহরণ দেখেছি যা এটি সেভাবে করে।
জিওভান্নি

@ জিওভান্নি টারলিনজেন আপনি যা বলছেন তা ভুল না বুঝলে আমি এটাই করছি। NavigationLinkভেতরে FileViewযা জড়িয়ে রাখা হয়েছে NavigationViewতাই NavigationLinkএকটি এর আবৃত করা হয় ভিতরেNavigationView
Vapidant

একটি ন্যূনতম চলমানযোগ্য প্রকল্প সরবরাহ করুন। আমি এটি পুনরুত্পাদন করতে পারি না, তাই সম্ভবত এটি সুইফটুইআইয়ের বাগগুলির মধ্যে একটি নয়।
মোজতাবা হোসেইনি

আপনি কি পুরো উত্স কোড সরবরাহ করতে পারেন যাতে আমি আপনার সমস্যাটি সমাধান করতে পারি
হার্ডিক বার

আপনি কিভাবে প্রস্তুত cellArray?
ইকোমস

উত্তর:


5

একই সমস্যা ছিল - এটি চেষ্টা করুন। আমি যখন সুইফটইউআই-তে বাগ সংশোধন করা হবে তখন এটিকে হ্যাক করার জন্য বলব।

struct ListView: View {
@State private var destID = 0
...
var body: some View {
...
  NavigationLink(destination: FileView(path: "/\(cell.FileID)", displaysLogin: self.$displaysLogin)
   .navigationBarTitle(cell.FileName) 
   .onDisappear() { self.destID = self.destID + 1 }
  ){
   constructedCell(FileType: cell.FileType, FileName: cell.FileName, FileID: cell.FileID) 
  }.id(destID)

মূলত মনে হয় যে কিছু পরিস্থিতিতে (আইওএস 13.3 - সিমুলেটার?) গৌণ দৃশ্যটি নেভিগেশন স্ট্যাক থেকে সরানো হলে নেভিগেশনলিঙ্কটি পুনরায় সেট করা হয় না। চারপাশের কাজ হিসাবে আমাদের নেভিগেশন লিঙ্কটি নতুনভাবে তৈরি করা দরকার। এই আইডি পরিবর্তন কি। এটি আমার সমস্যাটিকে সংশোধন করেছে।

তবে আপনার যদি নেভিগেশনলিঙ্কস রয়েছে যা শৃঙ্খলিত রয়েছে, এটি একটি লিঙ্ক যা লিঙ্কগুলির অন্য তালিকার দিকে নিয়ে যায়, তবে এই সমাধানটি পার্শ্ব প্রতিক্রিয়া তৈরি করবে; শেষ দৃশ্যটি দেখানোর দ্বিতীয় চেষ্টায় স্ট্যাকটি উত্সটিতে ফিরে আসে।


এই বাগটি সর্বশেষতম আইওএস সংস্করণে স্থির হয়েছে। সমস্যাটি যেমন দাঁড়িয়েছিল তখন সমাধান করার কারণে আমি এটিকে সঠিক উত্তর হিসাবে চিহ্নিত করছি, তবে এটি কোনও সমস্যা হওয়া উচিত নয়। আমি আপনার সমস্যার ব্যাখ্যাটিও পছন্দ করি। ধন্যবাদ.
ভ্যাপিড্যান্ট

আপনি যখন সর্বশেষ আইওএস সংস্করণটি বলছেন, আপনি 13.4 বা একটি বিটা সংস্করণটির অর্থ?
রিকার্ডো আলভেস

আমিও জানতে চাই কোন সংস্করণটি সঠিকভাবে কাজ করে? আমার কাছে 13.3 (এটি এখনকার সর্বশেষতম আইওএস) এবং এখনও সমস্যাটি রয়েছে।
ma

আমি বিশ্বাস করি যে এই বাগটি আইওএস 13.3 বিটা বিল্ডে উপস্থাপিত হয়েছিল তবে এটি আইওএস 13.3 বিটা 4 হিসাবে ঠিক করা হয়েছে
ওয়াপিড্যান্ট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.