রুট ভিউ কন্ট্রোলার কীভাবে পাবেন?


109

আমার রুট ভিউ কন্ট্রোলারের একটি উদাহরণ প্রয়োজন।

আমি এই পদ্ধতির চেষ্টা করেছি:

UIViewController *rootViewController = (UIViewController*)[[[UIApplication sharedApplication] keyWindow] rootViewController];

রিটার্নস: নাল :

এছাড়াও যখন আমি কন্ট্রোলারগুলির একটি অ্যারে পাওয়ার চেষ্টা করি:

NSArray *viewControllers = self.navigationController.viewControllers;

এটি কেবলমাত্র একজন নিয়ামককে ফেরত দেয় তবে এটি আমার রুট ভিউ নিয়ন্ত্রণকারী নয়।

যদি আমি নেভিগেশন নিয়ামক থেকে নেওয়ার চেষ্টা করি:

UIViewController *root = (UIViewController*)[self.navigationController.viewControllers objectAtIndex:0];

রিটার্নস: নাল :

কোন ধারণা কেন? আমার রুট ভিউ কন্ট্রোলারের উদাহরণ পেতে আমি আর কী চেষ্টা করতে পারি?

ধন্যবাদ।


কী উইন্ডোটি সক্রিয় উইন্ডো, উদাহরণস্বরূপ, আপনি যখন কোনও ইউআইএলার্টভিউ দেখান, ইউআইএলআর্টভিউয়ের উইন্ডোটি মূল উইন্ডো তবে এটি অ্যাপডেলিগেটের উইন্ডো নয় I আপনি যদি অ্যাপ্লিকেশনটির রুটভিউ কনট্রোলার পেতে চান তবে সম্ভবত [[[ইউআইএপ্লিকেশন শেয়ারড অ্যাপ্লিকেশন] প্রতিনিধি] উইন্ডো] রুটভিউ নিয়ন্ত্রণকারী ] ভাল.
夜 之 星辰

উত্তর:


213

আপনি যদি rootViewControllerনিজের অ্যাপ্লিকেশনটিতে সেট করে থাকা অ্যাক্সেসের চেষ্টা করছেন । এটা চেষ্টা কর:

উদ্দেশ্য গ

YourViewController *rootController = (YourViewController*)[[(YourAppDelegate*)
                                   [[UIApplication sharedApplication]delegate] window] rootViewController];

দ্রুতগতি

let appDelegate  = UIApplication.sharedApplication().delegate as AppDelegate
let viewController = appDelegate.window!.rootViewController as YourViewController

সুইফট 3

let appDelegate  = UIApplication.shared.delegate as! AppDelegate
let viewController = appDelegate.window!.rootViewController as! YourViewController

সুইফট 4 এবং 4.2

let viewController = UIApplication.shared.keyWindow!.rootViewController as! YourViewController

সুইফ্ট 5 এবং 5.1 এবং 5.2

let viewController = UIApplication.shared.windows.first!.rootViewController as! YourViewController

3
আপনার ভিউকন্ট্রোলার * রুটকন্ট্রোলার = (আপনার ভিউকন্ট্রোলার *) [[(আপনার অ্যাপ্লিকেশনডেলিগেট *) [[ইউআইএপ্লিকেশন শেয়ারড অ্যাপ্লিকেশন] প্রতিনিধি] উইন্ডো] রুটভিউ নিয়ন্ত্রণকারী];
ক্রেগ মুর

1
সুইফট 2 এ, আন-র‌্যাপ জোর করতে আপনাকে "লেট অ্যাপডেলিগেট = ইউআইএপ্লিকেশন.শ্রেড অ্যাপ্লিকেশন ()। প্রতিনিধি হিসাবে প্রয়োগ করুন! অ্যাপ্লিকেশন" ব্যবহার করতে হবে
জ্যাকি

এই পদ্ধতিতে দু'জন কন্ট্রোলার বরাদ্দ করার কোনও উপায় কী আপনি যাতে উভয় থেকে ঘড়িতে ডেটা টানতে পারেন?
জনি মেরিন

1
এটি একটি জীবনরক্ষক। ধন্যবাদ! এই সুস্বাদু কোডটির টুকরোটি খুঁজতে আমাকে কয়েক মাস সময় লাগল!
ItMeDom

37

উদ্দেশ্য গ

UIViewController *controller = [UIApplication sharedApplication].keyWindow.rootViewController;

সুইফট ২.০

let viewController = UIApplication.sharedApplication().keyWindow?.rootViewController

সুইফট 5

let viewController = UIApplication.shared.keyWindow?.rootViewController

3
এটি শীর্ষ উত্তর হওয়া উচিত। +1 অন্যান্য উত্তরগুলি কার্যকর হবে না যদি আপনার মূল অ্যাপটি নির্ভর করে এমন কোনও আলাদা ফ্রেমওয়ার্ক থেকে আপনাকে রুট ভিউ নিয়ন্ত্রণকারীকে উল্লেখ করতে হয়।
সি তেওয়াল্ট

10

@ 0x7fffffff দ্বারা এখানে প্রস্তাবিত হিসাবে , আপনার যদি ইউআইএনএভিগেশন কন্ট্রোলার থাকে তবে এটি করা সহজ হতে পারে:

YourViewController *rootController =
    (YourViewController *)
        [self.navigationController.viewControllers objectAtIndex: 0];

উপরের উত্তরের কোডটি ইউআইএনএভিগেশন নিয়ন্ত্রককে রিটার্ন দেয় (যদি এটি থাকে) এবং এটি আপনার যদি প্রয়োজন হয় তবে আপনি ব্যবহার করতে পারেন self.navigationController


5

যদি আপনার কোনও ভাল কারণ না থাকে তবে আপনার রুট কন্ট্রোলারে এটি করুন:

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(onTheEvent:)
                                             name:@"ABCMyEvent"
                                           object:nil];

এবং আপনি যখন এটি অবহিত করতে চান:

[[NSNotificationCenter defaultCenter] postNotificationName:@"ABCMyEvent"
                                                object:self];                


1

এটি করার দ্রুত উপায়, আপনি এটিকে যে কোনও জায়গা থেকে কল করতে পারেন, এটি alচ্ছিক ফিরে আসে তাই এটি সম্পর্কে নজর রাখুন:

/// EZSwiftExtensions - Gives you the VC on top so you can easily push your popups
var topMostVC: UIViewController? {
    var presentedVC = UIApplication.sharedApplication().keyWindow?.rootViewController
    while let pVC = presentedVC?.presentedViewController {
        presentedVC = pVC
    }

    if presentedVC == nil {
        print("EZSwiftExtensions Error: You don't have any views set. You may be calling them in viewDidLoad. Try viewDidAppear instead.")
    }
    return presentedVC
}

এটি একটি স্ট্যান্ডার্ড ফাংশন হিসাবে এতে অন্তর্ভুক্ত:

https://github.com/goktugyil/EZSwiftExtensions


1

সুইফট 3: আউট সেগু সহ ভিউ কন্ট্রোলারকে চেজ করুন এবং যেকোনওবজেক্টের ব্যবহার পাঠান : টার্গেট ভিউকন্ট্রোলারে আইডেন্টিটি মেইনপেজভিউ কনট্রোলার

let mainPage = self.storyboard?.instantiateViewController(withIdentifier: "MainPageViewController") as! MainPageViewController

var mainPageNav = UINavigationController(rootViewController: mainPage)

self.present(mainPageNav, animated: true, completion: nil)

অথবা আপনি যদি ভিউ কন্ট্রোলার পরিবর্তন করতে চান এবং ডেটা প্রেরণ করতে চান

let mainPage = self.storyboard?.instantiateViewController(withIdentifier: "MainPageViewController") as! MainPageViewController

let dataToSend = "**Any String**" or  var ObjectToSend:**AnyObject** 

mainPage.getData = dataToSend 

var mainPageNav = UINavigationController(rootViewController: mainPage)

self.present(mainPageNav, animated: true, completion: nil)  

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