转载

[iOS] 一个左侧导 app 的简单框架

一个左侧导app的简单框架(以LGSideMenuController为基础)

整个app里只用到了一个UINavigationController,因此另行封装一个单例类VCManager,在类中获取UINavigationController实例,利用该实例进行页面的push,pop等操作。优点是利用VCManager在所有的地方都可以实现push,pop操作。如下图一个cell里两个button:登录和注册,它们对应的push操作都是在cell内部通过调用 [[VCManager mainManager] pushVC:vc animated:YES]; 实现。 在任何需要的地方使用VCManager封装的方法实现跳转,避免了过多的代理和block,代码更加美观

[iOS] 一个左侧导 app 的简单框架

VCManager:

// 单例,仅管理侧导及首页的页面。
+ (instancetype)mainManager;
  • navigation相关
// 业务层最好不要使用本属性
- (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];
}
原文  https://github.com/thinkq/ZQSideMenuProject
正文到此结束
Loading...