루트 뷰 컨트롤러를 얻는 방법?
루트 뷰 컨트롤러의 인스턴스가 필요합니다.
나는 그 접근법을 시도했다.
UIViewController *rootViewController = (UIViewController*)[[[UIApplication sharedApplication] keyWindow] rootViewController];
반환 값 : null :
또한 컨트롤러 배열을 얻으려고 할 때 :
NSArray *viewControllers = self.navigationController.viewControllers;
하나의 컨트롤러 만 반환하지만 내 루트 뷰 컨트롤러가 아닙니다.
내비게이션 컨트롤러에서 가져 오려고하면 :
UIViewController *root = (UIViewController*)[self.navigationController.viewControllers objectAtIndex:0];
반환 값 : null :
이유는 무엇입니까? 루트 뷰 컨트롤러의 인스턴스를 얻기 위해 또 무엇을 시도 할 수 있습니까?
감사.
rootViewController
appDelegate에서 설정 한에 액세스하려는 경우 . 이 시도:
목표 -C
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
Swift 4 및 4.2
let viewController = UIApplication.shared.keyWindow!.rootViewController as! YourViewController
루트 뷰 컨트롤러에 액세스하는 짧은 방법입니다.
목표 C
UIViewController *controller = [UIApplication sharedApplication].keyWindow.rootViewController;
스위프트 2.0
let viewController = UIApplication.sharedApplication().keyWindow?.rootViewController
Objective-C 형식 :
UIViewController *objViewController = [UIApplication sharedApplication].keyWindow.rootViewController;
Swift 2 형식 :
let objViewController = UIApplication.sharedApplication().keyWindow?.rootViewController
Swift 3 및 4 형식 :
let objViewController = UIApplication.shared.keyWindow?.rootViewController
제안으로 여기 @의 0x7fffffff에 의해 당신이 UINavigationController가있는 경우, 할 쉽게 할 수 있습니다 :
YourViewController *rootController =
(YourViewController *)
[self.navigationController.viewControllers objectAtIndex: 0];
위 답변의 코드는 UINavigation 컨트롤러 (있는 경우)를 반환하며 이것이 필요한 경우 self.navigationController
.
정당한 이유가 없다면 루트 컨트롤러에서 다음을 수행하십시오.
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(onTheEvent:)
name:@"ABCMyEvent"
object:nil];
알림을 받으려는 경우 :
[[NSNotificationCenter defaultCenter] postNotificationName:@"ABCMyEvent"
object:self];
신속한 방법으로 어디에서나 호출 할 수 있으며 선택 사항을 반환하므로 조심하십시오.
/// 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
스위프트 3
let rootViewController = UIApplication.shared.keyWindow?.rootViewController
Swift 3 : Segue없이 ViewController를 변경하고 AnyObject 사용 : 대상 ViewController의 Identity MainPageViewController
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)
let view:UIView = UIView()
view.frame = CGRect(x:0, y:0, width:UIApplication.shared.statusBarFrame.width, height:UIApplication.shared.statusBarFrame.height
view.backgroundColor = UIColor.init(named: "yourColor")
UIApplication.shared.keyWindow!.rootViewController?.view.addSubview(view)
참고 URL : https://stackoverflow.com/questions/12418177/how-to-get-root-view-controller
'programing' 카테고리의 다른 글
두 열에서 고유 한 스키마 빌더 laravel 마이그레이션 (0) | 2020.08.26 |
---|---|
CoffeeScript에서 배열에 값을 어떻게 추가합니까? (0) | 2020.08.26 |
공백 일치 정규식-Java (0) | 2020.08.26 |
웹 사이트의 파비콘은 어떻게 구할 수 있습니까? (0) | 2020.08.26 |
git에서 가져 오는 중 오류-저장소 데이터베이스 .git / objects에 개체를 추가 할 수있는 권한이 부족합니다. (0) | 2020.08.26 |