[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>