Potrzebuję wystąpienia głównego kontrolera widoku.
Wypróbowałem te podejścia:
UIViewController *rootViewController = (UIViewController*)[[[UIApplication sharedApplication] keyWindow] rootViewController];
Zwroty: null :
Również gdy próbuję zdobyć tablicę kontrolerów:
NSArray *viewControllers = self.navigationController.viewControllers;
Zwraca tylko jeden kontroler, ale nie jest to mój główny kontroler widoku.
Jeśli spróbuję pobrać z kontrolera nawigacji:
UIViewController *root = (UIViewController*)[self.navigationController.viewControllers objectAtIndex:0];
Zwroty: null :
Jakieś pomysły, dlaczego? Co jeszcze mogę spróbować, aby uzyskać instancję mojego głównego kontrolera widoku?
Dzięki.
objective-c
swift
ios5
uiviewcontroller
uinavigationcontroller
Chłopiec z ulicy
źródło
źródło
Odpowiedzi:
jeśli próbujesz uzyskać dostęp do
rootViewController
pliku ustawionego w pliku appDelegate. Spróbuj tego:Cel C
Szybki
Szybki 3
Swift 4 i 4.2
Swift 5, 5.1 i 5.2
źródło
Cel C
Swift 2.0
Szybki 5
źródło
Jak sugeruje tutaj przez @ 0x7fffffff, jeśli masz UINavigationController może łatwiej będzie zrobić:
Kod w powyższej odpowiedzi zwraca kontroler UINavigation (jeśli go masz) i jeśli tego potrzebujesz, możesz użyć
self.navigationController
.źródło
Jeśli nie masz dobrego powodu, w kontrolerze głównym zrób to:
A kiedy chcesz to powiadomić:
źródło
Szybki 3
źródło
Szybki sposób, możesz to zrobić z dowolnego miejsca, zwraca to opcjonalne, więc uważaj na to:
Jest to standardowa funkcja w:
https://github.com/goktugyil/EZSwiftExtensions
źródło
Swift 3: Chage ViewController withOut Segue i wyślij AnyObject Use: Identity MainPageViewController na docelowym ViewController
lub jeśli chcesz zmienić kontrolera widoku i wysłać dane
źródło