[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,代碼更加美觀

VCManager:
// 單例,僅管理側導及首頁的頁面。
- (instancetype)mainManager;</code></pre>
- 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;</code></pre>
- 側導相關
// 更改首頁的頁面
// 默認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>
登錄和注冊實例代碼:
- (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>
來自:https://github.com/thinkq/ZQSideMenuProject