我已经做到了这一点,但如果我做得对,我会问更多。我一直沉浸在苹果文档和iOS编程书籍中。从那以后,我完全重新设计了我的应用程序以实现可重用性和所有这些好东西。
现在我有一个名为 RootController 的主 UIViewController 来处理 UINavigationController 和自定义 MenuController。我认为 UIViewController 包含是我的 RootController 的最佳方法。
RootController ---> UINavigationController
---> MenuController
现在出现了一个问题,我需要 UINavigationController 中的一些子 UIViewController 与主 RootController 进行通信。
RootController ---> UINavigationController --> UIViewController
^_____________________________________________|
我决定做的是用一个类别扩展 UIViewController。
UIViewController+RootController.h
@interface UIViewController (RootController)
@property (nonatomic, readonly) RootController *rootController;
@end
UIViewController+RootController.m
@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
当 [self rootController] 被任何 UIViewController 调用时,它将遍历父视图控制器,直到找到与 RootController 匹配的视图控制器,然后它将返回匹配项。我还将属性设为静态,因此它只被查找一次。
所以我的问题是这是我采取的正确方法吗?我试图做一些类似于 UIViewController 的 navigationController 方法的东西。
我需要访问主根控制器,以便可以从应用程序中的任何视图处理 MenuController。