প্রোগ্রামেটিকভাবে সুইফ্টের পূর্ববর্তী ভিউকন্ট্রোলারে ফিরে যান


211

আমি একটি বোতাম ক্লিকের একটি পৃষ্ঠায় ব্যবহারকারীকে প্রেরণ। এই পৃষ্ঠাটি একটি ইউআইটিএবল ভিউ নিয়ন্ত্রণকারী

এখন যদি ব্যবহারকারী কোনও ঘরে টোকা দেয়, আমি তাকে আগের পৃষ্ঠায় ফিরে যেতে চাই।

আমি এরকম কিছু সম্পর্কে ভেবেছিলাম self.performSegue("back")....তবে এটি একটি খারাপ ধারণা বলে মনে হচ্ছে।

এটি করার সঠিক উপায় কী?


13
স্ব.নিভিশনকন্ট্রোলার? .পপভিউ কনট্রোলার অ্যানিমেটেড (সত্য)
কল্পনা

উত্তর:


526

সুইফট 3:

আপনি যদি আগের ভিউ কন্ট্রোলারে ফিরে যেতে চান

_ = navigationController?.popViewController(animated: true)

আপনি যদি আবার রুট ভিউ কন্ট্রোলারে যেতে চান

_ = navigationController?.popToRootViewController(animated: true)

1
সেলটি আলতো চাপলে আমি কীভাবে পূর্ববর্তী নিয়ন্ত্রণকারীকে ডেটা পাঠাতে পারি? ? আমরা navigationController .popViewControllerAnimated (সত্য) ব্যবহার করছেন কিনা তা
JDDelgado

4
@JDDelgado এই কমান্ডের সাহায্যে আপনি ব্যবহারকারী, সাথে ডেটা ফেরত পাঠাতে হয় stackoverflow.com/questions/12561735/...
মোহাম্মদের Kaakati

36
সুইফট 3 এটা.popViewController(animated: true)
Sasho

9
যেকোন সতর্কবার্তাটি প্রশমিত করার জন্য:_ = self.navigationController?.popToRootViewController(animated: true)
অ্যান্ড্রু কে

1
আমরা ফিরতি মূল্য উপেক্ষা করছি; _ = এটির জন্য দ্রুততম সম্মেলনটি।
অ্যান্ড্রু কে 10

53

সুইফট 3 , সুইফট 4

if movetoroot { 
    navigationController?.popToRootViewController(animated: true)
} else {
    navigationController?.popViewController(animated: true)
}

নেভিগেশনকন্ট্রোলার alচ্ছিক কারণ এটি নাও থাকতে পারে।


@ ভাইচেস্লাভা আমি একটি ত্রুটি পেয়ে যাচ্ছি "বন্ধে 'সীফট' এর নিখুঁত ব্যবহার, শব্দার্থকে স্পষ্ট করে তুলতে 'স্ব' ব্যবহার করুন"
সন্দীপ সুবেদী

@SandipSubedi ব্যবহার [weak self]এবংself?.navigationController?.
Vyacheslav

এটি দরকারী ছিল তবে আমি নেভিগেশনের সাথে কিছু পরিবর্তনশীল প্রেরণ করতে চাই তবে এখন আমি পারছি না - আমি ব্যবহার করলাম override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if let vc = segue.destination as? তবে যখন আমি এটি ব্যবহার করি তখন আমি এটি ব্যবহার করতে পারি না
সাইদ রহমাতলাহী

কীভাবে নেভিগেশনকন্ট্রোলার যুক্ত করবেন?
ব্যবহারকারী 25

@ ব্যবহারকারী 25 যোগ করবেন? আপনি কি বোঝাতে চেয়েছেন?
ব্যচেসলাভ

37

সুইফট 3

আমি উত্তরে দেরি করতে পারি তবে দ্রুত 3 এর জন্য আপনি এটি এইভাবে করতে পারেন:

override func viewDidLoad() {
    super.viewDidLoad()

    navigationItem.leftBarButtonItem = UIBarButtonItem(title: "< Back", style: .plain, target: self, action: #selector(backAction))

    // Do any additional setup if required.
}

func backAction(){
    //print("Back Button Clicked")
    dismiss(animated: true, completion: nil)
}

3
এটি 'পুরোপুরি' সঠিক নয়। যদি আপনি এমন কোনও ভিউ কন্ট্রোলার উপস্থাপন করেন যার নিজস্ব নেভিগেশন থাকে এবং আপনি কোনও ভিউ কন্ট্রোলার সেই পদ্ধতিটি ব্যবহার করার পরে dismiss:এটি কেবলমাত্র বর্তমান ভিউ নিয়ন্ত্রককেই বরখাস্ত করবে না, তবে এটি এখানেই জিজ্ঞাসা করা হয়েছিল তা নয়।
আর্নেস্তো ফার্নান্দেজ

2
ব্যবহারকারীটির কাছে নেভিগেশন নিয়ামক ছিল কিনা তা জিজ্ঞাসা করা হয়নি। এটি কোনও নেভিগেশন নিয়ন্ত্রকের পক্ষে সহজ এবং সর্বোত্তম উত্তর। এটি সত্যই গ্রহণযোগ্য উত্তর হওয়া উচিত।
ড্রয়েড ক্রিস

থ্রোকস ধন্যবাদ - হাই হাই আর্নেস্টোফেন্ডজ, আপনি হয়ত সঠিকভাবে বলেছেন যে রুটভিসিটিও বরখাস্ত হবে, তবে এটি আমার সাথে ঘটে না, এটি কেবল বর্তমানভিসিটিকে খারিজ করে দেয়, আমি প্রোগ্রামিয়ালি আইটেমগুলি যুক্ত করছি এবং সরিয়ে দিচ্ছি, এবং এটি একই পন্থা নাও হতে পারে স্টোরিবোর্ডে স্বাভাবিক যোগ করার উপাদানগুলির সাথে .. আমি ভুল হলে আমার বোঝার সংশোধন করুন ... টেবিলের জন্য যদি ব্যবহারকারীকে অন্য দর্শনে বিশদটি প্রেরণের প্রয়োজন হয় তবে এটি অন্য একটি মামলা এবং আমি যে পোস্ট করেছি তার সাথে কোনও যোগসূত্র নেই এবং 100% সম্মত হবে আপনার সাথে..আমি বুঝতে পেরেছিলাম যে এই ক্ষেত্রে একটি ব্যাক বোতামের দরকার: :)
পূর্ণশক্তি

সম্ভবত আপনি একটি সামান্য ভূমিকা যুক্ত করতে পারেন .. কারণ বিদ্যমান বরখাস্ত এবং নেভিগেশন নিয়ন্ত্রণকারী? পপভিউ কনট্রোলার
মার্লোনপ্যা

dismiss(animated: true, completion: nil)আবর্তনের পরে কাজ করে না!
ব্যবহারকারী 924

31

সুইফট 4

পূর্ববর্তী ভিউকন্ট্রোলারে ফিরে / ফিরে আসার দুটি উপায় রয়েছে:

  1. প্রথম কেস : আপনি যদি ব্যবহার করেন: self.navigationController?.pushViewController(yourViewController, animated: true) এই ক্ষেত্রে আপনার ব্যবহার করা দরকারself.navigationController?.popViewController(animated: true)
  2. দ্বিতীয় কেস : আপনি যদি ব্যবহার করেন: self.present(yourViewController, animated: true, completion: nil) এই ক্ষেত্রে আপনার ব্যবহার করা দরকারself.dismiss(animated: true, completion: nil)

প্রথম ক্ষেত্রে, নিশ্চিত হয়ে নিন যে আপনি নিজের স্টোরিবোর্ডে একটি ন্যাভিগেশনকন্ট্রোলারে আপনার ভিউকন্ট্রোলারটিকে এম্বেড করেছেন be


19

যে ক্ষেত্রে আপনি যখন UIViewControllerএকটি UIViewControllerঅর্থের মধ্যে থেকে উপস্থাপন করেছেন ..

// Main View Controller
self.present(otherViewController, animated: true)

কেবল dismissফাংশনটি কল করুন :

// Other View Controller
self.dismiss(animated: true)

self.dismiss(animated: true)- ঘূর্ণনের পরে কাজ করে না
user924

17

দ্রুত এবং উপরে 5

কেস 1: নেভিগেশন নিয়ামক ব্যবহার করে

self.navigationController?.popViewController(animated: true)

কেস 2: উপস্থিত ভিউ কন্ট্রোলার ব্যবহার করে

self.dismiss(animated: true, completion: nil)

11

যদি সেগু 'শো' বা 'পুশ' ধরনের হয় তবে আপনি ইউআইএনএভিগেশন কন্ট্রোলারের ইনস্ট্যান্সে "পপভিউ কনট্রোলার (অ্যানিমেটেড: বুল)" আবেদন করতে পারেন। অথবা যদি সিগু "ধরণের" উপস্থিত থাকে তবে ইউআইভিউউকন্ট্রোলারের উদাহরণ সহ "বরখাস্ত (অ্যানিমেটেড: বুল, সমাপ্তি: (() -> অকার্যকর)?))" কল করুন


7

সুইফ্ট 3 এর জন্য আপনাকে কেবল নিম্নলিখিত কোডের লাইনটি লিখতে হবে

_ = navigationController?.popViewController(animated: true)

2

এটি চেষ্টা করুন: পূর্ববর্তী দৃষ্টির জন্য এটি ব্যবহার করুন:

navigationController?.popViewController(animated: true)  

এই কোডটি ব্যবহার করতে রুট করতে পপ করুন:

navigationController?.popToRootViewController(animated: true) 

2

শেষ ভিউ হিসাবে একটি ট্যাবভিউকন্ট্রোলার সহ সুইফট 4.0 এক্সকোড 10.0

যদি আপনার শেষ ভিউকন্ট্রোলারটি কোনও ট্যাবভিউকন্ট্রোলারে এম্বেড থাকে তবে নীচের কোডটি আপনাকে মূলটিতে প্রেরণ করবে ...

navigationController?.popToRootViewController(animated: true)
navigationController?.popViewController(animated: true)

তবে আপনি যদি সত্যিই শেষ দর্শনে ফিরে যেতে চান (এটি ট্যাব 1, ট্যাব 2 বা ট্যাব 3 ভিউ হতে পারে ..) আপনাকে নীচের কোডটি লিখতে হবে:

_ = self.navigationController?.popViewController(animated: true)

এটি আমার পক্ষে কাজ করে, আমি আমার ট্যাবভিউয়ের একটির পরে একটি ভিউ ব্যবহার করছিলাম :)


1

স্টোরিবোর্ডে কীভাবে আপনার ভিউকন্ট্রোলারটিকে নেভিগেশনকন্ট্রোলারে এম্বেড করা যায় সে সম্পর্কিত প্রশ্নের জন্য:

  1. আপনার স্টোরিবোর্ডটি খুলুন যেখানে আপনার ভিন্ন ভিউকন্ট্রোলার রয়েছে
  2. আপনি নিজের নেভিগেশন কন্ট্রোলার থেকে শুরু করতে চান এমন ভিউ কন্ট্রোলারটি আলতো চাপুন
  3. এক্সকোডের শীর্ষে, "সম্পাদক" এ আলতো চাপুন
  4. -> এম্বেড এ আলতো চাপুন
  5. -> "নেভিগেশন কন্ট্রোলার আলতো চাপুন

1

এটি আমার জন্য কাজ করে (সুইফট ইউআই)

struct DetailView: View {
@Environment(\.presentationMode) var presentationMode: Binding<PresentationMode>

  var body: some View {
      VStack {
        Text("This is the detail view")
        Button(action: {
          self.presentationMode.wrappedValue.dismiss()
        }) {
          Text("Back")
        }
      }
    }
}

0

আমি এটি এই মত করে

func showAlert() {
    let alert = UIAlertController(title: "Thanks!", message: "We'll get back to you as soon as posible.", preferredStyle: .alert)

    alert.addAction(UIAlertAction(title: "OK", style: .default, handler: { action in
        self.dismissView()
    }))

    self.present(alert, animated: true)
}

func dismissView() {
    navigationController?.popViewController(animated: true)
    dismiss(animated: true, completion: nil)
}

0

আমি এই সমস্যার আরেকটি পদ্ধতির পরামর্শ দিতে চাই। কোনও ভিউ কন্ট্রোলারকে পপ করতে নেভিগেশন কন্ট্রোলার ব্যবহার না করে, উইন্ডাইন্ড সেগগুলি ব্যবহার করুন। এই সমাধানটির কয়েকটি, তবে সত্যই গুরুত্বপূর্ণ, সুবিধাগুলি রয়েছে:

  1. উত্স নিয়ামক গন্তব্য সম্পর্কে কিছু না জেনে অন্য যে কোনও গন্তব্য নিয়ামককে (কেবল পূর্ববর্তীটি নয়) ফিরে যেতে পারেন।
  2. পুশ এবং পপ সেগগুলি স্টোরিবোর্ডে সংজ্ঞায়িত করা হয়েছে, সুতরাং আপনার দর্শন নিয়ন্ত্রকদের কোনও নেভিগেশন কোড নেই।

আপনি আনওয়াইন্ড সেগুজগুলি ধাপে ধাপে আরও বিশদ পেতে পারেন । কীভাবে কীভাবে আরও পূর্ববর্তী লিঙ্কে ব্যাখ্যা করা হবে, কীভাবে ডেটা ফেরত পাঠাতে হবে, তবে এখানে আমি একটি সংক্ষিপ্ত ব্যাখ্যা করব explanation

1) গন্তব্যে যান (উত্স নয়) দেখুন নিয়ামক এবং একটি অনিচ্ছাকৃত অংশ যুক্ত করুন:

    @IBAction func unwindToContact(_ unwindSegue: UIStoryboardSegue) {
        //let sourceViewController = unwindSegue.source
        // Use data from the view controller which initiated the unwind segue
    }

2) সিটিআরএল নিজেই ভিউ কন্ট্রোলার থেকে অরিজিন ভিউ কন্ট্রোলারে প্রস্থান আইকনে টানুন :

দৃশ্য নিয়ন্ত্রণকারীর কাছ থেকে উচ্ছেদ করুন

3) কিছুক্ষণ আগে আপনি তৈরি করেছেন এমন আনইন্ড ফাংশনটি নির্বাচন করুন:

আনইন্ড ফাংশন নির্বাচন করুন

৪) আনইন্ড শেগ নির্বাচন করুন এবং এটি একটি নাম দিন:

নাম খুলে ফেলা অনিচ্ছুক

5) মূল দেখার নিয়ন্ত্রকের যেকোন স্থানে যান এবং আনইন্ড সাইডকে কল করুন:

performSegue(withIdentifier: "unwindToContact", sender: self)

যখন আপনার নেভিগেশন জটিল হতে শুরু করে তখন আমি এই পদ্ধতির অনেক অর্থ প্রদান করেছি off

আমি আশা করি এটা কারো সাহায্যে লাগবে.


-3

আমি নেভিগেটেড কন্ট্রোলারের "ভিউইডডিডিস্পিয়ার" কোড লিখে মূল পৃষ্ঠাতে পুনর্নির্দেশ করতে পারি,

override func viewDidDisappear(_ animated: Bool) { self.navigationController?.popToRootViewController(animated: true) }


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