iOS 는 어떻게 최상 위 뷰 컨트롤 러 에 대한 상세 한 설명 을 가 져 옵 니까?
5011 단어 ios꼭대기 층viewcontroller
// viewcontroller
- (UIViewController *)getCurrentVC
{
///
UIViewController *rootViewController = [UIApplication sharedApplication].keyWindow.rootViewController;
UIViewController *currentVC = [self getCurrentVCFrom:rootViewController];
return currentVC;
}
- (UIViewController *)getCurrentVCFrom:(UIViewController *)rootVC
{
UIViewController *currentVC;
if ([rootVC presentedViewController]) {
// presented
rootVC = [rootVC presentedViewController];
}
if ([rootVC isKindOfClass:[UITabBarController class]]) {
// UITabBarController
currentVC = [self getCurrentVCFrom:[(UITabBarController *)rootVC selectedViewController]];
} else if ([rootVC isKindOfClass:[UINavigationController class]]){
// UINavigationController
currentVC = [self getCurrentVCFrom:[(UINavigationController *)rootVC visibleViewController]];
} else {
//
currentVC = rootVC;
}
return currentVC;
}
2 분석2.1 UIApplication 에 대한 분석
UIApplication 의 핵심 역할 은 iOS 프로그램 이 실행 되 는 동안 제어 와 협력 작업 을 제공 하 는 것 입 니 다.모든 프로그램 은 실행 기간 에 하나의 UIApplication(또는 하위 클래스)인 스 턴 스 만 있어 야 합 니 다.프로그램 이 실 행 될 때 main 함수 에서 UIApplication 의 단일 인 스 턴 스 를 만 듭 니 다.코드 에서[UIApplication shared Application]을 호출 하여 이 인 스 턴 스 의 지침 을 얻 을 수 있 습 니 다.
2.2 KeyWindow 간략 하 다
KeyWindow 를 간략하게 분석 하기 전에 UIWindow 의 개념 을 살 펴 보 겠 습 니 다.
UIWindow 는 UIView 의 하위 클래스 로 UIView 에 보기 등급,관리 보기,전달 UIEvent 대상 의 속성 과 Method 등 을 추가 합 니 다.
상술 한 실례 에서 우 리 는 통과 했다 [UIApplication shared Application]에서 가 져 온 UIApplication 의 단일 인 스 턴 스 대상 을 인 스 턴 스 대상 의 keyWindow 를 통 해 현재 활성 화 된 window(또는 현재 표 시 된 주 창)를 가 져 옵 니 다.
KeyWindow 란 IOS 개발 에서 활성 화 된 창,즉 키보드 와 비 터치 이 벤트 를 받 을 수 있 는 창 을 말 합 니 다.한 번 에 하나의 KeyWindow 만 있 을 수 있 습 니 다.IOS 개발 에 서 는 UIWindow Level 의 수 치 를 설정 하여 맨 앞 에 있 는 창 을 설정 할 수 있 습 니 다.Level 수치 가 높 은 창 이 앞 에 있 을 수록 두 창의 Level 등급 이 같 으 면,MakeKey AndVisible 을 통 해 KeyWindow 를 표시 할 수 있 습 니 다.
(void)makeKeyWindow;//현재 UIWindow 를 keyWindow(주 창)로 변경
(void)makeKeyAndVisible;//현재 UIWindow 를 keyWindow 로 만 들 고 표시
[UIApplication shared Application].windows//현재 응용 프로그램의 모든 UIWindow 가 져 오기
[UIApplication shared Application].keyWindow//현재 응용 프로그램의 주 창 가 져 오기
view.window//어떤 UIView 가 있 는 UIWindow 를 가 져 옵 니 다.
MakeKey AndVisible 과 MakeKeyWindow
말 그대로 현재 창의 루트 보기
현재 UIWindow 만 rootViewController 라 는 속성 이 있 습 니 다.UINavigationController 의 루트 보기 개념 과 혼동 하지 마 십시오.
UINavigationController 는 사실 rootViewController 라 는 속성 이 없습니다!자체 적 인 setter 방법 도 없다.루트 보 기 를 설정 하려 면 다음 과 같은 방법 만 사용 할 수 있 습 니 다.
- (instancetype)initWithRootViewController:(UIViewController *)rootViewController;
uiwindow 의 루트 보기 가 져 오기방식 1
AppDelegate *app =(AppDelegate *) [UIApplication sharedApplication].delegate;
UIViewController *rootViewController1 = appdelegate.window.rootViewController;
방식 2
UIWindow *window = [UIApplication sharedApplication].keyWindow;
UIViewController *rootViewController2 = window.rootViewController;
주의해 야 할 것 은:방식 2 에서 UIAlertController,UIAlertView,UIActionSheet 이 팝 업 되면 상기 View 는 새로운 window 를 생 성하 고 인터페이스 에 추가 하기 때문에 keyWindow 는 UIAlertController Shim PresenterWindow 와 같은 종류 가 됩 니 다.
2.4 PresentedViewController 간략 분석
ios 개발 에서 일반 페이지 의 구성 은 NavigationController 가 있다. 아니면 다른 UiViewController,UITabViewController 등...
사례 설명 A.presented ViewController A 컨트롤 러 가 B 컨트롤 러 로 넘 어 갑 니 다.B.presenting View Controller 는 A 컨트롤 러 로 돌아 가 는 것 입 니 다.
총결산
iOS 가 최상 위 뷰 컨트롤 러 를 어떻게 가 져 오 는 지 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 iOS 가 최상 위 뷰 컨트롤 러 를 가 져 오 는 내용 은 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Swift의 패스트 패스Objective-C를 대체하기 위해 만들어졌지만 Xcode는 Objective-C 런타임 라이브러리를 사용하기 때문에 Swift와 함께 C, C++ 및 Objective-C를 컴파일할 수 있습니다. Xcode는 S...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.