কীভাবে সুইফটে ভিউকন্ট্রোলারকে বরখাস্ত করবেন?


213

আমি কল করে দ্রুত একটি ViewController খারিজ করতে চেষ্টা করছি dismissViewControllerএকটি ইনIBAction

  @IBAction func cancel(sender: AnyObject) {
    self.dismissViewControllerAnimated(false, completion: nil)
    println("cancel")
}

@IBAction func done(sender: AnyObject) {
    self.dismissViewControllerAnimated(false, completion: nil)
    println("done")
}

একটি সিগ এলোমেলো চিত্র

আমি কনসোল আউটপুটে প্রিন্টলান বার্তাটি দেখতে পেয়েছি তবে ভিউকন্ট্রোলার কখনই বরখাস্ত হয় না। কি সমস্যা হতে পারে?


2
আপনি কীভাবে ভিউ কন্ট্রোলার উপস্থাপন করলেন?
ডাসডম

আমি একটি সেগুন সেট করে ম্যাপিং করেছি - "শো", সংযুক্ত স্ক্রিনশটটি দেখুন।
রশঙ্কর

4
মডেল ব্যবহার করার চেষ্টা করুন। আপনি যদি ধাক্কা ব্যবহার করেন তবে আপনার এটিকে নেভিগেশন নিয়ামকের পপ পদ্ধতিতে বরখাস্ত করা উচিত।
দশম

উত্তর:


414

আপনার চিত্র থেকে মনে হচ্ছে আপনি ভিউকন্ট্রোলারটিকে পুশ ব্যবহার করে উপস্থাপন করেছেন

dismissViewControllerAnimatedঘনিষ্ঠ ViewControllers যে মোডাল ব্যবহার উপস্থাপন করতে ব্যবহৃত হয়

সুইফট 2

navigationController.popViewControllerAnimated(true)

সুইফট 4

navigationController?.popViewController(animated: true)

dismiss(animated: true, completion: nil)

6
আপনি কীভাবে এটি 'শো'র বিবরণ প্রদর্শন করতে চান?
মোরালকোড

2
জন্য সুইফট 2.2 navigationController .popViewControllerAnimated (সত্য)!
swiftBoy

7
জন্য সুইফট 3 ! NavigationController .popViewController (অ্যানিমেটেড: সত্য)
অ্যালেক্স ট্রট

174

আপনার সমস্যার সমাধান আমার আছে। আপনি যদি মডেল ব্যবহার করে ভিউ উপস্থাপন করেন তবে দয়া করে ভিউ কন্ট্রোলারকে বরখাস্ত করার জন্য এই কোডটি চেষ্টা করুন:

সুইফট 3:

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

অথবা

যদি আপনি "পুশ" সিগমেন্ট ব্যবহার করে ভিউ উপস্থাপন করেন

self.navigationController?.popViewController(animated: true)

1
ধন্যবাদ, তবে এখনও একই ফলাফল, এটি
ভিউকন্ট্রোলারকে

4
ওপি ব্যবহারের পদ্ধতিতে এটি কীভাবে আলাদা?
ডাসডম

30
আপনি আমার প্রশ্নের প্রতিক্রিয়া না জানালে কথোপকথন অকেজো।
ডাসডম

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

19

আপনি যদি এটি করেন তবে আমি অনুমান করি যে আপনি কনসোলে প্রিন্টলন বার্তাটি পাবেন না,

@IBAction func cancel(sender: AnyObject) {
  if(self.presentingViewController){
    self.dismissViewControllerAnimated(false, completion: nil)
    println("cancel")
   }
}

@IBAction func done(sender: AnyObject) {
  if(self.presentingViewController){
    self.dismissViewControllerAnimated(false, completion: nil)
    println("done")
  }    
}

1
stackoverflow.com/questions/30840235/… । কোন সাহায্য, দয়া করে? আমি এত দিন ধরে আটকে আছি যারা এখনও সমাধান খুঁজে পাচ্ছেন না
থিহা অং

14

সুইচ 3.0 থেকে 4.0 এ এটি আপনার ফাংশনে টাইপ করার মতো সহজ:

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

অথবা আপনি যদি কোনও নেভিগেশন নিয়ন্ত্রকের মধ্যে থাকেন তবে আপনি এটি "পপ" করতে পারেন:

self.navigationController?.popViewController(animated: true)

কাজ না করা বরখাস্ত করুন, কারণ আমি পুশভিউ কনট্রোলার ব্যবহার করছি। কেবলমাত্র স্ব.নিভিশনকন্ট্রোলার? .পপভিউকন্ট্রোলার (অ্যানিমেটেড: সত্য) কাজ করছে।
আইওএস

13
  1. আপনি কোনও নেভিগেশনকন্ট্রোলারে খারিজ করতে চান এমন দৃশ্য এম্বেড করুন
  2. আইডেন্টিফায়ার হিসাবে "সম্পন্ন" দিয়ে একটি বারবটন যুক্ত করুন
  3. সম্পন্ন বোতামটি নির্বাচিত সহকারী সম্পাদককে অনুরোধ করুন
  4. এই বোতামটির জন্য একটি আইবিএક્શન তৈরি করুন
  5. বন্ধনী মধ্যে এই লাইন যুক্ত করুন:

    self.dismissViewControllerAnimated(true, completion: nil)

12

ব্যবহার করুন:

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

পরিবর্তে:

self.navigationController.dismissViewControllerAnimated(true, completion: nil)

1
যুক্ত কর একটি ! নেভিগেশন কন্ট্রোলার এবং এটি আমার জন্য কাজ করে
জেসন জি

1
@ প্রাকৃতিক: সচেতন হন যে যদি নেভিগেশনকন্ট্রোলারটি শূন্য হয় এবং আপনি রাখেন, অ্যাপটি ক্র্যাশ হয়ে যাবে
চাকরিমা

8

আপনি যদি কোনও নেভিগেশন কন্ট্রোলার ব্যতীত কোনও নিয়ামক উপস্থাপন করেন তবে উপস্থাপক নিয়ন্ত্রকের কোনও পদ্ধতি থেকে আপনি নিম্নলিখিত কোডটি কল করতে পারেন।

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

যদি আপনার ভিউকন্ট্রোলারটি আধুনিকভাবে উপস্থাপন করা হয় তবে presentচ্ছিক উপস্থাপনাভিউকন্ট্রোলারটি শূন্য হবে না এবং কোডটি কার্যকর করা হবে।


তুমি আমার দিন বাঁচিয়েছ
শানু সিং

6

আমার অভিজ্ঞতার ভিত্তিতে আমি ইউআইভিউকন্ট্রোলারকে এক্সটেনশন হিসাবে বরখাস্ত করার জন্য একটি পদ্ধতি যুক্ত করি:

extension UIViewController {
    func dismissMe(animated: Bool, completion: (()->())?) {
        var count = 0
        if let c = self.navigationController?.viewControllers.count {
            count = c
        }
        if count > 1 {
            self.navigationController?.popViewController(animated: animated)
            if let handler = completion {
                handler()
            }
        } else {
            dismiss(animated: animated, completion: completion)
        }
    }
}

তারপরে যে কোনও UIViewControllerসাবক্লাসে ভিউ কন্ট্রোলারকে বরখাস্ত করার জন্য আমি এই পদ্ধতিটি কল করি । উদাহরণস্বরূপ, বাতিল কর্মে:

class MyViewController: UIViewController {
   ...
   @IBAction func cancel(sender: AnyObject) {
     dismissMe(animated: true, completion: nil)
   }
   ...
}

6

অ্যাপল নথি থেকে :

উপস্থাপনা করা ভিউ কন্ট্রোলার এটি উপস্থাপিত দর্শন নিয়ামককে বরখাস্ত করার জন্য দায়বদ্ধ

সুতরাং, এটি থেকে নিজেকে বরখাস্ত করার পদ্ধতিটি চাওয়া খারাপ অভ্যাস ।

আপনি যদি এটি মডেল উপস্থাপন করেন তবে আপনার কী করা উচিত তা হ'ল:

presentingViewController?.dismiss(animated: true, completion: nil)

4

বাতিল বা অন্য ভিসিতে সম্পন্ন করে কোনও সিগ তৈরি করবেন না এবং কেবল এই কোডটি আপনার বোতাম @ আইবিএक्शन লিখুন

@IBAction func cancel(sender: AnyObject) {
    dismiss(animated: false, completion: nil)
}

3

এখানে উপস্থিত ভিউ কন্ট্রোলারকে বরখাস্ত করার এবং পূর্ববর্তী ভিউ নিয়ন্ত্রকের কাছে ফিরে যাওয়ার এক উপায়। আপনি কেবল স্টোরিবোর্ডের মাধ্যমে এটি করতে পারেন।

  1. স্টোরিবোর্ড খুলুন
  2. বাতিল বোতামে ডান ক্লিক করুন এবং এটিকে পূর্ববর্তী দৃশ্য নিয়ামকটিতে টেনে আনুন, যেখানে আপনি আগের নিয়ামকটিতে ফিরে যেতে চান
  3. এখন ডান ক্লিকটি ছেড়ে দিন এবং আপনি কিছু ক্রিয়া দেখতে পাবেন যা বাতিল বোতামটিতে সম্পাদিত হয়
  4. এখন তালিকা থেকে "পপওভার বর্তমান" বিকল্পটি বেছে নিন
  5. এখন আপনি বাতিল বোতামটি ক্লিক করে আপনার বর্তমান দৃশ্যটি বরখাস্ত করতে পারেন

দয়া করে এটি চেষ্টা করুন, এটি আমার সাথে কাজ করছে।

দ্বিতীয় উপায় - ব্যবহার - navigationController.popViewControllerAnimated(true)

শুভকামনা..


stackoverflow.com/questions/30840235/… । কোন সাহায্য, দয়া করে? আমি এত দিন ধরে আটকে আছি যারা এখনও সমাধান খুঁজে পাচ্ছেন না
থিহা অং

3
এটা ভুল. আপনি পরিবর্তে বর্তমানের শীর্ষে একটি নতুন ভিউ কন্ট্রোলার উপস্থাপন করছেন এমন দৃশ্যটি আপনি কখনই প্রত্যাখ্যান করছেন না, যা স্মৃতি গতির ফলে। এটি সম্ভবত অ্যাপ্লিকেশন স্টোর থেকে আপনার অ্যাপ্লিকেশনটিকে প্রত্যাখ্যান করবে।
3366784

2

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


1

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


1

সুইফট ৩.০ এ

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

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

1

সুইফটে 4.1 এবং এক্সকোড 9.4.1 এ

আপনি যদি নতুন ভিউ কন্ট্রোলার উপস্থাপনের জন্য পুশভিউ কনট্রোলার ব্যবহার করেন তবে এটি ব্যবহার করুন

self.navigationController?.popViewController(animated: false)

আর একটি অনুলিপি পেস্ট উত্তর
জে ডো।

1

এটা চেষ্টা কর:

@IBAction func close() {
  dismiss(animated: true, completion: nil)
}

"বরখাস্ত ভিউকন্ট্রোলার" নামক পদ্ধতিতে এটি কেবলমাত্র একটি একক প্যারামিটার নেয়, যা আমি মনে করি পূর্ববর্তী দৃশ্যে অ্যানিমেটেডকে বরখাস্ত করার মতো দেখায়, এটি সহজ সমাধান।
ক্যাসিডিওগো

0

এই কোডটি বরখাস্ত করার জন্য বোতাম ক্রিয়ায় লিখিত

  @IBAction func cancel(sender: AnyObject) {
   dismiss(animated: true, completion: nil)
  }

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


0

আপনি যদি প্যারেন্ট ভিসিতে বর্তমান পদ্ধতিটি ব্যবহার করে থাকেন তবে আপনার শিশু ভিসি এটি ব্যবহার করে বরখাস্ত করার জন্য আপনার এই ফাংশনটি কল করা উচিত

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

আপনি যদি ধাক্কা পদ্ধতি ব্যবহার করে সন্তানের ভিসি কল করেন তবে শিশু উপাচার্যকে এটি ব্যবহার করে বরখাস্ত করুন

self.navigationController?.popViewController(animated: true)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.