IOS 模拟QQ分组折叠

#define USER_KEY @"users"

#define GROUPNAME_KEY @"groupName"

@interfaceViewController ()<UITableViewDataSource,UITableViewDelegate>

{

UITableView *_tableView;

NSMutableArray
*_dataSource;

BOOL expanded;

}

- (void)initializeDataSource;

- (void)initializeUserInterface;

- (void)buttonPressed:(UIButton *)sender;

- (BOOL)isExpanded:(int)section;

- (void)cellapseOrExpand:(int)section;

@end

@implementation ViewController

- (void)dealloc

{

[_tableViewrelease];

[_dataSourcerelease];

[super dealloc];

}

- (void)viewDidLoad

{

[superviewDidLoad];

// Do any additional setup after loading the view.

[selfinitializeDataSource];

[selfinitializeUserInterface];

}

- (void)initializeDataSource

{

_dataSource =
[[NSMutableArrayarray] retain];

NSMutableDictionary *dict = [[NSMutableDictionaryalloc]
init];

[dict setObject:@"Friend"
forKey:GROUPNAME_KEY];

NSMutableArray
*arr = [[NSMutableArrayalloc] init];

[arr addObject: @"Amanda"];

[arr addObject: @"Cecil"];

[arr addObject: @"Martin"];

[dict setObject:arr forKey:USER_KEY];

[arr release];

[_dataSource addObject:dict];

[dict release];

NSMutableDictionary *diction = [[NSMutableDictionaryalloc]init];

[diction setObject:@"WorkmMate" forKey:GROUPNAME_KEY];

NSMutableArray
*array = [[NSMutableArrayalloc] init];

[array addObject: @"Eartha"];

[array addObject: @"Deirdre"];

[array addObject: @"Montague"];

[array addObject:@"Ken"];

[diction setObject:array
forKey:USER_KEY];

[array release];

[_dataSource addObject:diction];

[diction release];

}

- (void)initializeUserInterface

{

self.view.backgroundColor =
[UIColorwhiteColor];

_tableView = [[UITableViewalloc]initWithFrame:self.view.boundsstyle:UITableViewStylePlain];

_tableView.delegate =
self;

_tableView.dataSource =
self;

[self.viewaddSubview:_tableView];

[_tableViewrelease];

[_tableViewreloadData];

}

- (void)cellapseOrExpand:(int)section

{

expanded = NO;

NSMutableDictionary *data = [_dataSourceobjectAtIndex:section];

if ([data objectForKey:@"expanded"] != nil)

{

expanded =
[[data objectForKey:@"expanded"
] boolValue];

}

[data setObject:[NSNumbernumberWithBool:!expanded]
forKey:@"expanded"];

}

- (BOOL)isExpanded:(int)section

{

expanded = NO;

NSMutableDictionary *data = [_dataSourceobjectAtIndex:section];

if ([data objectForKey:@"expanded"] != nil)

{

expanded =
[[data objectForKey:@"expanded"
] intValue];

}

returnexpanded;

}

#pragma make - <UITableViewDelegate>

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section

{

return 40;

}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

{

return [_dataSourcecount];

}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

{

//当前为折叠

if (![self isExpanded:section])

{

return 0;

}

//
返回当前节点的数据

NSDictionary *data = [_dataSource objectAtIndex:section];

return [[data objectForKey:USER_KEY]count];

}

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section

{

UIView
*heighView = [[UIViewalloc]initWithFrame:CGRectMake(0, 0, 320, 30)];

heighView.backgroundColor =
[UIColorcolorWithPatternImage:[UIImageimageNamed:@"line.png" ]];

UILabel
*label = [[UILabelalloc]init];

label.bounds = CGRectMake(0, 0, 150,
30);

label.center = CGPointMake(120, 15);

NSDictionary *data = [_dataSource objectAtIndex:section];

label.text = [data objectForKey:GROUPNAME_KEY];

label.textAlignment = NSTextAlignmentLeft;

label.backgroundColor = [UIColorclearColor];

[heighView addSubview:label];

UIButton
*button = [[UIButtonalloc]initWithFrame:CGRectMake(0, 0, 30, 30)];

[button addTarget:selfaction:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];

//保存结号,传递方法

button.tag = section;

//是否展开,切换按钮显示图片

if ([self isExpanded:section])

{

[button
setImage:[UIImageimageNamed:@"btn_down"]
forState:UIControlStateNormal];

}

else

{

[button
setImage:[UIImageimageNamed:@"btn_right"]
forState:UIControlStateNormal];

}

[heighView addSubview:button];

[button release];

return heighView;

}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath
*)indexPath

{

static NSString *cellIndentifer = @"cell";

UITableViewCell
*cell = [tableView dequeueReusableCellWithIdentifier:cellIndentifer];

if (!cell)

{

cell =
[[[UITableViewCellalloc]initWithStyle:UITableViewCellStyleDefaultreuseIdentifier:  cellIndentifer]autorelease];

}

NSDictionary *data = (NSDictionary *)[_dataSourceobjectAtIndex:indexPath.section];

NSArray *personName = (NSArray *)[data objectForKey:USER_KEY];

if (personName == nil)

{

return
cell;

}

cell.selectionStyle = UITableViewCellSelectionStyleGray;

cell.textLabel.text
= [personName objectAtIndex:indexPath.row];

return cell;

}

- (void)buttonPressed:(UIButton *)sender

{

[self cellapseOrExpand:sender.tag];

[_tableViewreloadData];

}

@end

时间: 2024-08-11 08:24:39

IOS 模拟QQ分组折叠的相关文章

js仿qq分组折叠效果

<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> <style type="text/css"&g

模拟QQ分组(具有伸缩功能) SimpleExpandableListAdapter 适配器的用法,并且可添加组及其组内数据。

1 package com.lixu.qqfenzu; 2 3 import java.util.ArrayList; 4 import java.util.HashMap; 5 import java.util.List; 6 import java.util.Map; 7 8 import android.app.Activity; 9 import android.content.Context; 10 import android.graphics.Color; 11 import an

Android 利用ExpandableListView显示和查询仿QQ分组列表用户信息

在我们的项目开发过程中,经常会对用户的信息进行分组,即通过组来显示用户的信息,同时通过一定的查询条件来显示查询后的相关用户信息,并且通过颜色选择器来设置列表信息的背景颜色. 其中借鉴xiaanming:http://blog.csdn.net/xiaanming/article/details/12684155 下面来看看项目运行后的效果图以及代码结构图: 下面通过代码来实现整个效果. 1.主界面布局activity_main.xml <span style="font-size:18px

iOS开发 QQ粘性动画效果

QQ(iOS)客户端的粘性动画效果 时间 2016-02-17 16:50:00  博客园精华区 原文  http://www.cnblogs.com/ziyi--caolu/p/5195615.html 主题 iOS开发 qq的app中要是有新的联系人发消息过来,相应联系人的cell右边会有一个红色的圆圈表示消息条数.如果去触碰那个圆圈,可以发现它竟然会跟着手指的移动而移动. 在一定范围内,手指离开屏幕,会发现红色圆圈会自动弹性的回到原来的位置.而如果超出一定距离,这个圆圈会做一个销毁的动画,

模拟QQ系统设置面板实现功能

业务需求: 基于网盘客户端的实现,原有网盘的设置面板无论从界面显示还是从业务需求都不能满足我们的正常需求.当前的要求是,模拟QQ系统设置的面板实现当前我们网盘中的基本配置功能.在完成这篇文章时已将基本功能实现完成,虽未整合进网盘客户端中,但基本技术预演已经实现. QQ系统设置面板分析: QQ系统设置面板效果图: QQ系统设置面板功能描述: 由于存在较多的配置,如果每个模块的配置项都设计到一个窗体中,则会存在很多的窗体,不太符合用户的使用体验,且程序编写也比较麻烦.QQ系统设置面板中的实现是,所有

ios测试基础六:ios模拟不同网速

iOS模拟不同网络速度,模拟2G 3G网速下,检验手机上运行是否正常,各种loading图标使用是否正常等 前提准备: 1. 电脑 上安装 charles或者fiddler 代理软件: 2. iphone真机或模拟器: 操作步骤: 1.将iphone真机绑定 代理,电脑上打开代理软件,比如charles 2. 在charles菜单 栏上 选择 "Proxy"--"Throttle Setting"; 3. 在打开的弹框中,作如下选择,点击"ok"

【大话QT之八】模拟QQ系统设置面板实现功能

业务需求: 基于网盘客户端的实现,原有网盘的设置面板无论从界面显示还是从业务需求都不能满足我们的正常需求.当前的要求是,模拟QQ系统设置的面板实现当前我们网盘中的基本配置功能.在完成这篇文章时已将基本功能实现完成,虽未整合进网盘客户端中,但基本技术预演已经实现. QQ系统设置面板分析: QQ系统设置面板效果图: QQ系统设置面板功能描述: 由于存在较多的配置,如果每个模块的配置项都设计到一个窗体中,则会存在很多的窗体,不太符合用户的使用体验,且程序编写也比较麻烦.QQ系统设置面板中的实现是,所有

利用phantomjs模拟QQ自动登录

之前为了抓取兴趣部落里的数据,研究了下QQ自动登录. 当时搜索了一番,发现大部分方法都已经失效了,于是准备自己开搞. 第一个想到的就是参考网上已有方案的做法,梳理登陆js的实现,通过其他语言重写.考虑到js可能会更新,放弃了此方案. 第二个想到的是能不能直接调用QQ自己的js方法,模拟进行提交呢.搜索一番后发现神器 ---- "phantomjs". PhantomJS is a headless WebKit scriptable with a JavaScript API. It

腾讯公司ios版QQ邮箱App使用感受,说一个很不好的地方

其实大概一年前就安装过QQ邮箱(ios版本),不过当时实在是愤怒得不得不卸载,原因在于: 让人愤怒的QQ邮箱! 我有多个QQ邮箱,当我在QQ邮箱app里面添加了一个邮箱账号,再添加其他QQ邮箱账号之后,奇迹的事情发生了,去网页端登录,打开邮箱可以看到他们可以相互登录了!!这些QQ邮箱强制性的相互自动关联了!!而且还不止如此,如果你想用QQ邮箱app来登录多个邮箱账号,就必须让他们账号关联,反正一登录他们账号就自动关联!隐私.安全何在? 设计初衷是好的,方便用户(其实这哪门子方便啊).但假如用户根