博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
侧边栏抽屉效果之开源库MMDrawerController的使用
阅读量:4312 次
发布时间:2019-06-06

本文共 3912 字,大约阅读时间需要 13 分钟。

1、开源库,利用pod引入第三方库MMDrawerController:

  在建立的Podfile中加入代码:

platform :ios, '7.0'pod 'ReactiveCocoa'pod 'MMDrawerController'pod 'Toast', '~> 3.0'pod 'CocoaSecurity'

  其中MMDrawerController就是开源的侧边栏库

2、在appdelegate中加入以下代码

  首先加入头文件

#import "AppDelegate.h"#import 
#import "LeftViewController.h"#import "ViewController.h"#import "RightViewController.h"

  新建属性

@property(nonatomic,assign) BOOL ifNavFromLeftMenu;@property(nonatomic,assign) BOOL isNavFinished;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {        ViewController *vc = [[ViewController alloc] init];    LeftViewController *leftVc = [[LeftViewController alloc] init];    RightViewController *right = [[RightViewController alloc] init];    UINavigationController *center     = [[UINavigationController alloc] initWithRootViewController:vc];    center.delegate = (id
)self; MMDrawerController * drawerController = [[MMDrawerController alloc] initWithCenterViewController:center leftDrawerViewController:leftVc rightDrawerViewController:right]; [drawerController setShowsShadow:YES]; drawerController.closeDrawerGestureModeMask = MMCloseDrawerGestureModeAll; [drawerController setRestorationIdentifier:@"MMDrawer"]; [drawerController setMaximumLeftDrawerWidth:270.0]; self.window.rootViewController = drawerController; return YES;}

  在加入左右侧边栏实现的代理方法

-(void)navigateToView:(UIViewController*)controler ifLeft:(BOOL)ifLeft animate:(BOOL)animate{    MMDrawerController*menuVctler = (MMDrawerController *)self.window.rootViewController;    UINavigationController* nav = (UINavigationController*)menuVctler.centerViewController;    if (nav) {        nav.delegate = (id
)self; self.ifNavFromLeftMenu = ifLeft; if (ifLeft) { [nav pushViewController:controler animated:NO]; [menuVctler closeDrawerAnimated:YES completion:^(BOOL finished) { }]; }else{ [nav pushViewController:controler animated:animate]; } }}#pragma mark - UINavigationControllerDelegate- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated{ if (!self.ifNavFromLeftMenu) { return; } UIViewController* rootVc = [navigationController.viewControllers objectAtIndex:0]; if([viewController isEqual:rootVc]){ MMDrawerController *menuVctler = (MMDrawerController *)self.window.rootViewController; __weak UINavigationController*nav = navigationController; __weak typeof(self)wself = self; [menuVctler openDrawerSide:MMDrawerSideLeft animated:YES completion:^(BOOL finished) { nav.delegate = nil; self.ifNavFromLeftMenu = NO; double delayInSeconds = 0.2; dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC)); dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ wself.isNavFinished = YES; }); }]; }}- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated{ if (!self.ifNavFromLeftMenu) { return; }}

3、在主控制器中加入导航栏左右按钮的点击处理实现方法:

-(void)leftDrawerButtonPress:(id)sender{    [self.mm_drawerController toggleDrawerSide:MMDrawerSideLeft animated:YES completion:nil];}-(void)rightDrawerButtonPress:(id)sender{    [self.mm_drawerController toggleDrawerSide:MMDrawerSideRight animated:YES completion:nil];}

编译运行就可以实现左右侧边栏的抽屉效果。

转载于:https://www.cnblogs.com/h-tao/p/5147253.html

你可能感兴趣的文章
python学习笔记之多个装饰器
查看>>
自己创建一个android studio在线依赖compile
查看>>
【android】安卓开发apk列表
查看>>
JavaScript高级特性-实现继承的七种方式
查看>>
20121016学习笔记四
查看>>
EntityFramework 学习 一 Stored Procedure
查看>>
Sliverlight之 故事板
查看>>
Java 必知必会的 20 种常用类库和 API
查看>>
HDU 1087 Super Jumping! Jumping! Jumping!
查看>>
0007_初始模块和字节码
查看>>
[效率提升]如何管理好你的电脑文件
查看>>
C++实验二
查看>>
Sultan's Dowry Problem - 苏丹新娘问题
查看>>
SharePoint2010 富文本框添加图片功能的扩展
查看>>
零零碎碎的知识
查看>>
UNIX基础--用户和基本账户管理
查看>>
设计模式
查看>>
5.0以上机器XPOSED框架安装流程
查看>>
静态方法与非静态方法
查看>>
[转]iOS进阶路线以及进阶书籍
查看>>