iOS分组通讯录效果+側滑菜单(MMDrawerController)

前言的废话…能够忽略

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

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

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

接下来上代码!

1.通讯录

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

(1.)私有成员

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

(2.)相关函数

    //每一个section 的title
- (UIView *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{

    return [_indexData objectAtIndex:section];
}
//返回索引栏数据
- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView{

    return _indexData;
}
//建立索引栏和section的关联
     - (NSInteger)tableView:(UITableView *)tableView             sectionForSectionIndexTitle:(NSString *)title
                    atIndex:(NSInteger)index{

  NSInteger section = [_indexData indexOfObject:title];
  return section;
}

2.側滑菜单

(1.)私有成员

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

(2.)相关函数

    1>.在viewDidLoad中初始化数据
    2>.设置側滑菜单(使用MMDrawerController)!

LeftSideDrawerViewController* leftMenuController = [[LeftSideDrawerViewController alloc] init];

leftMenuController.imgData = @[@"allFriend",@"jiaren",@"pengyou",@"tongxue",@"weifenzu"];
/**
注意:每一个页面要用NavigationViewController包一下.我不是在主页面写的側滑菜单,而是在模态窗体里写的.这里的參数须要细致检查,非常easy出现错误,假设參数出现错误,界面效果会有问题的,详细的你能够自己试着修改一下,深刻的理解一下.我这里的self不过一个ViewController,所以须要NavigationViewController再包一层.
*/
self.drawController = [[MMDrawerController alloc] initWithCenterViewController:[[NavigationViewController alloc] initWithRootViewController:self] leftDrawerViewController:leftController];

[_drawController setShowsShadow:NO];

[_drawController setMaximumLeftDrawerWidth:kScreenWidth*4/5];

[_drawController setOpenDrawerGestureModeMask:MMOpenDrawerGestureModeAll];

[_drawController setCloseDrawerGestureModeMask:MMCloseDrawerGestureModeAll];

_window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

UIColor * tintColor = [UIColor colorWithRed:29.0/255.0
                                      green:173.0/255.0
                                       blue:234.0/255.0
                                      alpha:1.0];

[_window setTintColor:tintColor];

_window.rootViewController = _drawController;

[_window makeKeyAndVisible];

3>.初始化数据

_topTableData = @[@[@"新的朋友(0)",@"qunmemberaction"],@[@"我的粉丝(0)",@"qunweiboaction"],@[@"我的群(0)",@"qunmemberaction"]];   

 _bottomTableData = @[@[@"啊1",@"啊2"],@[@"波波",@"菠菜"],@[@"赫赫"],@[@"校内外助手",@"新人",@"小人",@"昕人"]];

_indexData = @[@"A",@"B",@"H",@"X"];

_leftMenuData = @[@"所有好友(2)",@"家人(0)",@"朋友(0)",@"同学(0)",@"未分组(2)"];
4>.选择左側菜单中某一项,側滑菜单关闭并刷新主页面的数据
a.側滑菜单.m中
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{

    ContactsViewController* contactController = [[ContactsViewController alloc] initWithNibName:@"ContactsViewController" bundle:nil];

    self.leftDelegate = contactController;

    [self.leftDelegate  passToContacts:[NSString  stringWithFormat:@"%ld",(long)indexPath.row]];

    [self.mm_drawerController closeDrawerAnimated:YES completion:nil];
}
b.主页面.m中
- (void)passToContacts:(NSString*)value{
 //又一次请求好友通讯录,并刷新tableview
  groupIndex = [value intValue];
  [self viewDidLoad];
}

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

//更改window的根视图控制器
- (void)pressCancleBtn:(id)sender{

    TabbarViewController* tabbarController =  [[TabbarViewController alloc]init];

    tabbarController.selectedIndex = 4;
self.window.rootViewController = tabbarController;

    [self.window makeKeyAndVisible];

}

最后的啰嗦

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

时间: 2024-12-25 19:49:25

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

【案例分享】仿QQ5.0側滑菜单ResideMenu

本文由孙国威 原创.如需转载,请注明出处! 为了兴许对这个项目进行优化,比方透明度动画.背景图的位移动画.以及性能上的优化. 我把这个项目上传到github上面,请大家随时关注. github地址https://github.com/sunguowei 近期项目要做一个QQ5.0的側滑菜单效果.和传统的側滑菜单存在着一些差异. 想必大家都已经见识过了. 为了不反复发明轮子,先去github上面搜索了一番. 发现了几个相似的,可是还是有一些不同. 以下是搜索到的相似的开源项目. RESideMen

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

在这篇文章中写了 自己定义HorizontalScrollView实现qq側滑菜单 然而这个菜单效果仅仅是普通的側拉效果 我们还能够实现抽屉式側滑菜单 就像这样 第一种效果 另外一种效果 第三种效果 第四种效果 其他代码都和上篇文章同样,仅仅是在MyHorizontalScrollView.class重写onScrollChanged这种方法 第一种的側滑效果代码非常easy @Override protected void onScrollChanged(int l, int t, int o

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

眼下主流App开发中,部分是以側滑菜单为主布局架构,曾经做android側滑菜单时.大多选择使用github上的第三方开源框架SildingMenu,可是这个框架还是稍显笨重.好消息是google已经开源了一个側滑菜单布局组件:DrawerLayout.DrawerLayout是V4包中的组件.也是直接继承于ViewGroup类.所以这个类也是一个容器类.使用DrawerLayout能够轻松的实现抽屉效果,使用DrawerLayout的步骤有下面1几点: 1)在DrawerLayout中,第一个

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

一.概述 DrawerLayout是一个能够方便的实现Android側滑菜单的组件,我近期开发的项目中也有一个側滑菜单的功能.于是DrawerLayout就派上用场了.假设你从未使用过DrawerLayout.那么本篇博客将使用一个简单的案例带你迅速掌握DrawerLayout的使用方法. 二.效果图 三.代码实现 主布局activity_main.xml <? xml version="1.0" encoding="utf-8"? > <Line

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

项目地址:https://github.com/baoyongzhang/SwipeMenuListView Usage Step 1:import swipemenulistview.jar Step 2:add activity_main.xml in layout xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://sc

高仿QQ6.0之側滑删除

前两天已经完毕了高仿QQ6.0側滑和优化,今天来看下側滑删除的实现吧,假设有兴趣,能够去看下之前的两篇,仿QQ6.0側滑之ViewDragHelper的使用(一)和高仿QQ6.0側滑菜单之滑动优化(二),好了不多说,開始今天的内容了. 假设看过之前的两篇的话,想必今天的非常好实现的.我们来分析一下哈,側滑删除,布局也就是前面一个item.然后有两个隐藏的button(TextView也能够),然后我们能够向左側滑动,然后显示出来,然后对delete(删除键)实现监听.就能够了哈.好了那就来看看代

iOS抽屉效果和侧边菜单

iOS抽屉效果和侧边菜单 源码下载地址 1.效果演示 1. 抽屉效果演示 1. 侧边菜单演示 2.使用说明 构造方法 initialization /// 构造方法(左控制器 & 右控制器 & 背景图片) -(instancetype)initWithLeftController:(UIViewController *)leftController andMainController:(UIViewController *)mainController andRightController

Android学习之仿QQ側滑功能的实现

如今项目越来越多的应用了滑动删除的功能,Android本来遵循的是长按删除,IOS定制的是滑动删除,不可否认滑动删除确实在客户体验上要好一点,所以看了非常多关于仿QQ滑动删除的样例,还是感觉代码家的Android Swipe Layout要好一点,至于为何好,以下我给大家实验一下大家就知道了 老规矩.贴上效果图.这样大家才干更近距离的了解 这是代码家的效果图,效果非常多,支持listview.gridview,当然recylerview也是支持的. 可是呢,有个问题,代码家的效果非常多.可是我们

HBuilder开发App教程09-侧滑菜单

侧滑菜单 功能 上节讲到了列表页,这节讲一个比较常用的功能,侧滑菜单, 在本app中策划菜单用来记录已经完成的事项. 实现方式 用Hbuilder实现类似侧滑菜单这样原生app功能,一般有两种实现方式,详见:这里. 一是webview实现,二是div模拟实现, 两者的区别是div实现简答,但是偶尔效果不是很好, 而webview实现稍微复杂,页面传值也复杂,但是效果好点,一般推荐webview实现方式. index.html 代码 index.js中需要添加如下代码, var main = nu