이 작업을 수행했지만이 작업을 수행하면 더 많은 것을 요구합니다. 애플의 설명서와 iOS 프로그래밍 서적에 빠져있다. 그 이후로 나는 재사용 성 및 모든 좋은 것들을 위해 나의 애플 리케이션을 완전히 고쳤다.루트 컨트롤러에 얼마나 많은 수준의 깊은 액세스가 있더라도 모든 하위보기 컨트롤러를 제공합니다.
이제 UINavigationController 및 사용자 지정 MenuController를 처리하는 RootController라는 UIViewController가 있습니다. UIViewController 포함 내 RootController 최상의 접근 방식을 결정했습니다.
RootController ---> UINavigationController
---> MenuController
이제 기본 RootController와 통신하기 위해 UINavigationController의 하위 UIViewController가 필요했던 곳에 문제가 발생했습니다.
RootController ---> UINavigationController --> UIViewController
^_____________________________________________|
내가 결정한 것은 UIViewController를 카테고리로 확장 한 것입니다.
의 UIViewController + RootController.h
@interface UIViewController (RootController)
@property (nonatomic, readonly) RootController *rootController;
@end
의 UIViewController + RootController.m [자기 rootController 임의 UIViewController에 의해 호출된다
@implementation UIViewController (RootController)
- (RootController *)rootController {
static RootController *rootControler;
if(rootControler == nil) {
UIViewController *vc = self;
while((vc = vc.parentViewController)) {
if([vc isMemberOfClass:[RootController class]]){
rootControler = (RootController *)vc;
break;
}
}
}
return rootControler;
}
@end
는 상위 뷰 컨트롤러를 통해 루프하는 것은 그 하나를 찾을 때까지 RootController와 일치하면 일치 항목을 반환합니다. 또한 속성을 정적으로 만들었으므로 한 번만 조회했습니다.
제 궁금한 점은 제가 만든 올바른 방법 이었습니까? UIViewController의 navigationController 메서드와 비슷한 것을 만들려고했습니다.
내 응용 프로그램 내의 모든보기에서 MenuController를 처리 할 수 있도록 기본 루트 컨트롤러에 대한 액세스가 필요합니다.
기술적으로는 괜찮은 것처럼 보이지만, 말하면 쉽게 주석을 달 수 있습니다 왜 다른 컨트롤러에서 루트 컨트롤러에 액세스해야하는지. –
고마워, 나는 이것을했다. – arosolino