前言的废话…能够忽略

自从学会了使用Cocoapod,就欲罢不能了!由于太简单太赞了,不用再把源代码粘到project里了!

參见戴维营博客中的解说:Cocoapod 安装以及使用

先上一下效果图,请原谅我手残录的效果不是非常理想,大致就是这个意思

接下来上代码!

1.通讯录

通讯录基本的就是建立索引栏和section的关联,其次是初始化索引栏数据和每一个section的title.关于索引栏数据,假设写接口的小哥人好的话就会直接帮你返回ABCD…假设非常不幸,接口小哥不给你返回索引栏数据,那就得自己处理了!(处理方法兴许再补上,如今先假设接收到了索引栏数据)

(1.)私有成员

  1. @property(nonatomic,strong)NSArray* bottomTableData;
  2. @property(nonatomic,strong)NSArray* indexData;

(2.)相关函数

  1. //每一个section 的title
  2. - (UIView *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{
  3. return [_indexData objectAtIndex:section];
  4. }
  5. //返回索引栏数据
  6. - (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView{
  7. return _indexData;
  8. }
  9. //建立索引栏和section的关联
  10. - (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title
  11. atIndex:(NSInteger)index{
  12. NSInteger section = [_indexData indexOfObject:title];
  13. return section;
  14. }

2.側滑菜单

(1.)私有成员

  1. @property (weak, nonatomic) IBOutlet UITableView *topTableView;//新的好友,我的粉丝,我的群
  2. @property (nonatomic,strong)BottomTableView* bottomTabelView;//下半部分的通讯录
  3. @property(nonatomic,strong)UILabel* groupNameLbl;
  4. @property(nonatomic,strong)NSArray* topTableData;
  5. @property(nonatomic,strong)NSArray* bottomTableData;
  6. @property(nonatomic,strong)NSArray* indexData;//索引数据,对接接口后依据返回的对应数据进行修改
  7. @property(nonatomic,strong)NSArray* leftMenuData;//側滑菜单

(2.)相关函数

  1. 1>.在viewDidLoad中初始化数据
  2. 2>.设置側滑菜单(使用MMDrawerController)!
  3. LeftSideDrawerViewController* leftMenuController = [[LeftSideDrawerViewController alloc] init];
  4. leftMenuController.imgData = @[@"allFriend",@"jiaren",@"pengyou",@"tongxue",@"weifenzu"];
  5. /**
  6. 注意:每一个页面要用NavigationViewController包一下.我不是在主页面写的側滑菜单,而是在模态窗体里写的.这里的參数须要细致检查,非常easy出现错误,假设參数出现错误,界面效果会有问题的,详细的你能够自己试着修改一下,深刻的理解一下.我这里的self不过一个ViewController,所以须要NavigationViewController再包一层.
  7. */
  8. self.drawController = [[MMDrawerController alloc] initWithCenterViewController:[[NavigationViewController alloc] initWithRootViewController:self] leftDrawerViewController:leftController];
  9. [_drawController setShowsShadow:NO];
  10. [_drawController setMaximumLeftDrawerWidth:kScreenWidth*4/5];
  11. [_drawController setOpenDrawerGestureModeMask:MMOpenDrawerGestureModeAll];
  12. [_drawController setCloseDrawerGestureModeMask:MMCloseDrawerGestureModeAll];
  13. _window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
  14. UIColor * tintColor = [UIColor colorWithRed:29.0/255.0
  15. green:173.0/255.0
  16. blue:234.0/255.0
  17. alpha:1.0];
  18. [_window setTintColor:tintColor];
  19. _window.rootViewController = _drawController;
  20. [_window makeKeyAndVisible];
  21. 3>.初始化数据
  22. _topTableData = @[@[@"新的朋友(0)",@"qunmemberaction"],@[@"我的粉丝(0)",@"qunweiboaction"],@[@"我的群(0)",@"qunmemberaction"]];
  23. _bottomTableData = @[@[@"啊1",@"啊2"],@[@"波波",@"菠菜"],@[@"赫赫"],@[@"校内外助手",@"新人",@"小人",@"昕人"]];
  24. _indexData = @[@"A",@"B",@"H",@"X"];
  25. _leftMenuData = @[@"所有好友(2)",@"家人(0)",@"朋友(0)",@"同学(0)",@"未分组(2)"];
  26. 4>.选择左側菜单中某一项,側滑菜单关闭并刷新主页面的数据
  27. a.側滑菜单.m
  28. - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
  29. ContactsViewController* contactController = [[ContactsViewController alloc] initWithNibName:@"ContactsViewController" bundle:nil];
  30. self.leftDelegate = contactController;
  31. [self.leftDelegate passToContacts:[NSString stringWithFormat:@"%ld",(long)indexPath.row]];
  32. [self.mm_drawerController closeDrawerAnimated:YES completion:nil];
  33. }
  34. b.主页面.m
  35. - (void)passToContacts:(NSString*)value{
  36. //又一次请求好友通讯录,并刷新tableview
  37. groupIndex = [value intValue];
  38. [self viewDidLoad];
  39. }

3.从主页面返回上一级页面

  1. //更改window的根视图控制器
  2. - (void)pressCancleBtn:(id)sender{
  3. TabbarViewController* tabbarController = [[TabbarViewController alloc]init];
  4. tabbarController.selectedIndex = 4;
  5. self.window.rootViewController = tabbarController;
  6. [self.window makeKeyAndVisible];
  7. }

最后的啰嗦

由于是菜鸟,所以希望大家多多提意见,共同进步!最后附代码地址:MollyMmm的github

iOS分组通讯录效果+側滑菜单(MMDrawerController)的更多相关文章

  1. Android 高仿QQ5.2双向側滑菜单DrawerLayout实现源代码

    Android 高仿QQ5.2双向側滑菜单DrawerLayout实现源代码 左右側滑效果图 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a ...

  2. Android 实现形态各异的双向側滑菜单 自己定义控件来袭

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/39670935.本文出自:[张鸿洋的博客] 1.概述 关于自己定义控件側滑已经写了 ...

  3. 自己实现android側滑菜单

    当今的android应用设计中.一种主流的设计方式就是会拥有一个側滑菜单,以图为证:     实现这种側滑效果,在5.0曾经我们用的最多的就是SlidingMenu这个开源框架,而5.0之后.goog ...

  4. android:QQ多种側滑菜单的实现

    在这篇文章中写了 自己定义HorizontalScrollView实现qq側滑菜单 然而这个菜单效果仅仅是普通的側拉效果 我们还能够实现抽屉式側滑菜单 就像这样 第一种效果 另外一种效果 第三种效果 ...

  5. android側滑菜单-DrawerLayout的基本使用

    眼下主流App开发中,部分是以側滑菜单为主布局架构,曾经做android側滑菜单时.大多选择使用github上的第三方开源框架SildingMenu,可是这个框架还是稍显笨重.好消息是google已经 ...

  6. Android 使用DrawerLayout高速实现側滑菜单

    一.概述 DrawerLayout是一个能够方便的实现Android側滑菜单的组件,我近期开发的项目中也有一个側滑菜单的功能.于是DrawerLayout就派上用场了.假设你从未使用过DrawerLa ...

  7. 高仿QQ6.0側滑菜单之滑动优化(二)

    好了,昨天已经实现了高仿QQ6.0的側滑大致框架.如有兴趣.能够去看下仿QQ6.0側滑之ViewDragHelper的使用(一) 可是之前的实现.仅仅是简单的能够显示和隐藏左側的菜单,可是特别生硬,并 ...

  8. 【GitHub-SwipeMenuListView】针对ListView item的側滑菜单

    项目地址:https://github.com/baoyongzhang/SwipeMenuListView Usage Step 1:import swipemenulistview.jar Ste ...

  9. 【FastDev4Android框架开发】打造QQ6.X最新版本号側滑界面效果(三十八)

    转载请标明出处: http://blog.csdn.net/developer_jiangqq/article/details/50253925 本文出自:[江清清的博客] (一).前言: [好消息] ...

随机推荐

  1. Fib(兔子问题)python实现多种方法

    # 斐波那契数列是学计算机入门最经典的一道题目 # 斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacci) # ...

  2. 关于GIT使用过程中遇到的问题

    npm构建,将所需要安装的依赖添加至package.json文件中,使用cnpm i进行安装 #拉去指定项目的默认分支: git pull http://username:password@gitla ...

  3. C++中 list与vector的区别

    引用http://www.cnblogs.com/shijingjing07/p/5587719.html C++ vector和list的区别 1.vector数据结构vector和数组类似,拥有一 ...

  4. Server Tomcat v8.0 Server at localhost failed to start 问题解决方法?

    bi编程jsp  servlet 第一个程序: HelloServlet 运行错误 404: 十月 28, 2017 11:25:14 上午 org.apache.tomcat.util.digest ...

  5. JS高级——面向对象方式解决tab栏切换问题

    注意事项 1.给li元素注册事件,函数里面的this指的li元素,那么我们可以在注册事件之前将Tab对象用that=this进行保存 2.使用沙箱模式,所以暴露给外面的变量使用的是window.tab ...

  6. Ajax——异步基础知识(二)

    XML数据格式 首行必须是版本号和格式等信息 <?xml version="1.0" encoding="utf-8" ?> 最外层需要一个根节点进 ...

  7. 【转载】HTTP 响应头与状态码

    原文地址:https://segmentfault.com/a/1190000006689786 HTTP Response Header 响应头域允许服务器传递不能放在状态行的附加信息,这些域主要描 ...

  8. Stanford coursera Andrew Ng 机器学习课程第二周总结(附Exercise 1)

    Exercise 1:Linear Regression---实现一个线性回归 重要公式 1.h(θ)函数 2.J(θ)函数 思考一下,在matlab里面怎么表达?如下: 原理如下:(如果你懂了这道作 ...

  9. 注解是建立在class文件基础上的东西,同C语言的宏有异曲同工的效果

    注解是建立在class文件基础上的东西,同C语言的宏有异曲同工的效果 https://www.cnblogs.com/deman/p/5519901.html @是java注解,即annotation ...

  10. ES6 数组去重 方法用了filter或者 indexOf Array.from