[iOS] 一个左侧导 app 的简单框架
hxxk0641
8年前
<h2>一个左侧导app的简单框架(以LGSideMenuController为基础)</h2> <p>整个app里只用到了一个UINavigationController,因此另行封装一个单例类VCManager,在类中获取UINavigationController实例,利用该实例进行页面的push,pop等操作。优点是利用VCManager在所有的地方都可以实现push,pop操作。如下图一个cell里两个button:登录和注册,它们对应的push操作都是在cell内部通过调用 [[VCManager mainManager] pushVC:vc animated:YES]; 实现。 在任何需要的地方使用VCManager封装的方法实现跳转,避免了过多的代理和block,代码更加美观</p> <p><img src="https://simg.open-open.com/show/f8326e4697d772586778898fa0da7d66.gif"></p> <h2>VCManager:</h2> <pre> <code class="language-swift">// 单例,仅管理侧导及首页的页面。 + (instancetype)mainManager;</code></pre> <ul> <li>navigation相关</li> </ul> <pre> <code class="language-swift">// 业务层最好不要使用本属性 - (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;</code></pre> <ul> <li>侧导相关</li> </ul> <pre> <code class="language-swift">// 更改首页的页面 // 默认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;</code></pre> <h2>登录和注册实例代码:</h2> <pre> <code class="language-swift">- (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]; }</code></pre> <p> </p> <p>来自:https://github.com/thinkq/ZQSideMenuProject</p> <p> </p> <p><span style="background:rgb(189, 8, 28) url("data:image/svg+xml; border-radius:2px; border:medium none; color:rgb(255, 255, 255); cursor:pointer; display:none; font:bold 11px/20px "Helvetica Neue",Helvetica,sans-serif; opacity:1; padding:0px 4px 0px 0px; position:absolute; text-align:center; text-indent:20px; width:auto; z-index:8675309">Save</span></p>