整个app里只用到了一个UINavigationController,因此另行封装一个单例类VCManager,在类中获取UINavigationController实例,利用该实例进行页面的push,pop等操作。优点是利用VCManager在所有的地方都可以实现push,pop操作。如下图一个cell里两个button:登录和注册,它们对应的push操作都是在cell内部通过调用 [[VCManager mainManager] pushVC:vc animated:YES];
实现。 在任何需要的地方使用VCManager封装的方法实现跳转,避免了过多的代理和block,代码更加美观
// 单例,仅管理侧导及首页的页面。 + (instancetype)mainManager;
// 业务层最好不要使用本属性 - (UINavigationController *)mainNavi; // 是否为顶部节点 - (BOOL)isTopVC:(UIViewController *)vc; // 获取顶部节点 - (UIViewController *)getTopVC; // 获取底部节点 - (UIViewController *)getRootVC; // 压入节点 - (void)pushVC:(UIViewController *)vc animated:(BOOL)animated; // 弹出节点 - (void)popVCAnimated:(BOOL)animated; // 弹出节点 - (void)popToVC:(UIViewController *)vc animated:(BOOL)animated; // 弹出顶节点然后压入节点 // pop 无动画,animated 是指 push 动作是否有动画 - (void)popThenPushVC:(UIViewController *)vc animated:(BOOL)animated; // 弹出至某节点然后压入节点 // pop 无动画,animated 是指 push 动作是否有动画 - (void)popToVC:(UIViewController *)popVC thenPushVC:(UIViewController *)vc animated:(BOOL)animated;
// 更改首页的页面 // 默认ViewController - (void)setAppMainVC:(UIViewController *)appMainVC; // 连续设置首页多个页面 - (void)setAppMainVCs:(NSArray *)appMainVCs; // 是否禁掉右滑显示菜单 - (BOOL)menuViewSwipeGestureEnabled; - (void)setMenuViewSwipeGestureEnabled:(BOOL)enable; // 显示侧导目录 - (void)showMenuAnimated:(BOOL)animated completionHandler:(void (^)())completionHandler; // 关闭侧导目录 - (void)hideMenuAnimated:(BOOL)animated completionHandler:(void (^)())completionHandler; // 改变侧导目录显示/关闭状态 - (void)showOrHideMenuAnimated:(BOOL)animated completionHandler:(void (^)())completionHandler;
- (void)loginAction:(id)sender { [self pushVCWithTitle:@"登录"]; } - (void)registerAction:(id)sender { [self pushVCWithTitle:@"注册"]; } - (void)pushVCWithTitle:(NSString *)title { UIViewController *vc = [[UIViewController alloc] init]; vc.title = title; vc.view.backgroundColor = [UIColor whiteColor]; [[VCManager mainManager] pushVC:vc animated:YES]; [[VCManager mainManager] hideMenuAnimated:YES completionHandler:nil]; }