iOS 实现QQ界面
应师傅要求编写个QQ界面来不吝赐教下我的代码问题。
编写个QQ界面。有三个组,每一个组有人。并显示在线不在线。
先看一下效果图
这里省了事由于我的图片仅仅用了一张。假设要依据人的不同设置,仅仅要在cell里面改一下即可了;
主要是实现点击上面分组展开内容,再点击收回去。
废话不多说,上菜:
我们先来构造数据:
NSArray * InitArray =@[
@{
@"Name":@"朋友",
@"Group":@"YES",
@"Child":@[
@{@"Name":@"张三",
@"State":@"在线",},
@{@"Name":@"王五",
@"State":@"离开"}
]
},
@{
@"Name":@"家人",
@"Group":@"YES",
@"Child":@[@{@"Name":@"姐姐",
@"State":@"在线"},
@{@"Name":@"妹妹",
@"State":@"在线"},
@{@"Name":@"哥哥",
@"State":@"离开"},
@{@"Name":@"弟弟",
@"State":@"离开"}]
},
@{
@"Name":@"陌生人",
@"Group":@"YES",
@"Child":@[
@{@"Name":@"小王",
@"State":@"在线"},
@{@"Name":@"小李",
@"State":@"离开"},
@{@"Name":@"小红",
@"State":@"离开"}] }
];
设置一个数组属性 来接受数据;
@property (nonatomic,copy) NSMutableArray * CellArray;
好了,我们来利用数据构造界面吧;
界面非常easy:
一个图片是自己的头像;
一个是自己的网名
一个在线状态
以下就是一个表格(tableview)
@interface ViewController ()
{
UITableView * TableV;
} @end
设置一个tableview ;
往里面放:
UIImageView *IconImageV = [[UIImageView alloc]initWithFrame:CGRectMake(15, 30, 60, 60)];
IconImageV.image = [UIImage imageNamed:@"icon.png"];
[self.view addSubview:IconImageV];
UILabel *NameLabel = [[UILabel alloc]initWithFrame:CGRectMake(100, 30, 100, 30)];
NameLabel.text = @"雪松";
NameLabel.textAlignment = 1;//设置文字的对其方式 居中
[self.view addSubview:NameLabel];
UILabel *StateLabel = [[UILabel alloc]initWithFrame:CGRectMake(100, 60, 100, 30)];
StateLabel.text = @"在线";
NameLabel.textAlignment = 1;
[self.view addSubview:StateLabel]; TableV = [[UITableView alloc]initWithFrame:CGRectMake(15, 100, 290, 350)];
TableV.delegate = self;
TableV.dataSource = self;
TableV.separatorStyle=0;
TableV.backgroundColor =[UIColor yellowColor];
[self.view addSubview:TableV];
然后就是我们来构造table了
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{ UITableViewCell *cell ;
NSDictionary * dectionary = [_CellArray objectAtIndex:indexPath.row];
if([dectionary objectForKey:@"Group"])
{
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleValue2 reuseIdentifier:@"Group"];
cell.textLabel.text = [dectionary objectForKey:@"Name"];
cell.textLabel.textAlignment=0;
cell.backgroundColor = [UIColor grayColor];
cell.tag = 1;
}
else
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"Child"];
cell.imageView.image = [UIImage imageNamed: @"icon.png"];
cell.textLabel.text = [dectionary objectForKey:@"Name"];
cell.detailTextLabel.text = [dectionary objectForKey:@"State"];
}
return cell; }
这里我想说一下。这个tag 。我想了非常半天,怎样用来记录这个分组是打开的还是折叠的呢。没有办法,最后想到了tag 用tag=1表示折叠的。=2表示是打开的;
以下最难的就是,折叠打开的方式了。
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSMutableDictionary * dictionary = [NSMutableDictionary dictionaryWithDictionary:[_CellArray objectAtIndex:indexPath.row]]; UITableViewCell *cell = [TableV cellForRowAtIndexPath:indexPath];
NSLog(@"%@",cell.textLabel.text);
if([dictionary objectForKey:@"Group"])
{
NSArray *ChildArray = [dictionary objectForKey:@"Child"];
NSMutableArray *PathArray = [NSMutableArray array]; if(cell.tag==1)
{
cell.tag=2;
for (int i =0 ;i<ChildArray.count;i++)
{
dictionary = [ChildArray objectAtIndex:i];
[_CellArray insertObject:dictionary atIndex:i+indexPath.row+1];
NSIndexPath *path = [NSIndexPath indexPathForRow:i+indexPath.row+1 inSection:0];
[PathArray addObject:path];
}
[TableV insertRowsAtIndexPaths:PathArray withRowAnimation:UITableViewRowAnimationAutomatic];
}
else
{
cell.tag=1;
NSMutableIndexSet * deleteSet= [NSMutableIndexSet indexSet];
for (NSDictionary *dic in ChildArray)
{
NSInteger row= [_CellArray indexOfObject:dic];
NSIndexPath * Path = [NSIndexPath indexPathForRow:row inSection:0];
[PathArray addObject:Path];
[deleteSet addIndex:row];
}
[_CellArray removeObjectsAtIndexes:deleteSet];
[TableV deleteRowsAtIndexPaths:PathArray withRowAnimation:UITableViewRowAnimationBottom];
}
} }
上面是详细的方式。假设看不懂,那就去看我的另外一篇博客http://blog.csdn.net/u010123208/article/details/38176943
好了。QQ界面的源代码在
http://download.csdn.net/detail/u010123208/7774851
欢迎下载
iOS 实现QQ界面的更多相关文章
- Unity iOS混合开发界面切换思路
Unity iOS混合开发界面切换思路 最近有很多博友QQ 私信 或则 留言联系我,请教iOS和Unity界面之前相互切换的问题,源代码就不私下发你们了,界面跳转功能的代码我直接贴到下面好了,顺带说i ...
- 手把手教你修改iOS版QQ的运动步数
手把手教你修改iOS版QQ的运动步数 现在很多软件都加上了运动模块,比如QQ和微信,而且还有排行榜,可以和好友比较谁的运动步数多,任何东西只要添加了比较功能,就变得不一样了.今天教大家用代码去修改QQ ...
- 【新手--android日记】实现IOS风格电话界面
[前言--新手日记] 开始学习android开发,通过做一个通讯录练习,打算实现各种自己想实现的功能. 新手作品,技术含量很浅.主要是记录自己的学习过程. 纯学习之用,求评论,求建议,求教导. [正题 ...
- iOS开发 QQ粘性动画效果
QQ(iOS)客户端的粘性动画效果 时间 2016-02-17 16:50:00 博客园精华区 原文 http://www.cnblogs.com/ziyi--caolu/p/5195615.ht ...
- swift:用UITabBarController、UINavigationController、模态窗口简单的搭建一个QQ界面
搭建一个QQ界面其实是一个很简单的实现,需要几种切换视图的控制器组合一起使用,即导航控制器.标签栏控制器.模态窗口.其中,将标签栏控制器设置为window的rootViewController,因为Q ...
- Qt实现QQ界面
1.Qt实现QQ界面是通过QToolBox类来实现的,基本结构是:QToolBox里面装QGroupBox,然后QGroupBox里面装QToolButton,设置好相关属性即可 2.定义类继承QTo ...
- iOS调用QQ发起临时会话
iOS调用QQ发起临时会话 iOS调用qq前先判断是否安装qq, 之后通过OpenURL打开对用的qq NSURL *url = [NSURL URLWithString:@"mqq://& ...
- iOS 简单引导界面
代码地址如下:http://www.demodashi.com/demo/11607.html 前言 现在很多APP在用户第一次用的时候,由于用户可能并不知道其中一些功能点的时候,这个时候就需要我们来 ...
- WPF系列教程——(一)仿TIM QQ界面 - 简书
原文:WPF系列教程--(一)仿TIM QQ界面 - 简书 TIM QQ 我们先来看一下TIM QQ长什么样,整体可以将界面分为三个部分 TIM QQ 1. 准备 阅读本文假设你已经有XAML布局的基 ...
随机推荐
- FCC高级编程篇之Validate US Telephone Numbers
Validate US Telephone Numbers Return true if the passed string is a valid US phone number. The user ...
- H3C S5130交换机堆叠操作
配置过程中注意事项: 1.最好提前定义好IRF的主从设备,可通过IRF优先级进行定义,越大越优 2.一定要在使能IRF之前就保存配置(因为使能过程中,会出现设备重启的情况,如果设备重启后配置丢失,会导 ...
- /lib64和/usr/lib64和/usr/local/lib64的区别
简单说,/lib64是内核级的,/usr/lib64是系统级的,/usr/local/lib64是用户级的. /lib/ — 包含许多被 /bin/ 和 /sbin/ 中的程序使用的库文件.目录 /u ...
- Openstack API 开发 快速入门
Openstack 做为流行的开源云计算平台,其最大特性是利用其提供的基础设施API,让我们可以以软件的方式来动态管理IAAS资源.Openstack 提供的api是流行的Rest API. ...
- POJ——T 3041 Asteroids
http://poj.org/problem?id=3041 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 23565 ...
- Swift编写的一些完整的app
收集了一些实用swift编写的app,这些demo都是不错的值得学习的. 知乎日报 Swift-ZhihuDaily Swift版知乎日报 参照了YANGReal的糗事百科和uitableview的例 ...
- Windows下从源代码编译Skia
在PPAPI里面画图,能够结合第三方的图形库.比方Cairo.Skia. Google Chrome.Chromium和Android都使用Skia作为画图引擎.我也来试试Skia,先过编译关. fo ...
- js绑定事件方法:addEventListener与attachEvent的不同浏览器的兼容性写法
js的事件绑定方法中,ie仅仅支持attachEvent,而FF和Chrome仅仅支持addEventListener,所以就必须为这两个方法做兼容处理,原理是先推断attachEvent仅仅否为真( ...
- HDU 1542 Atlantis(矩形面积并)
HDU 1542 Atlantis 题目链接 题意:给定一些矩形,求面积并 思路:利用扫描线,因为这题矩形个数不多,直接暴力扫就能够了.假设数据大.就要用线段树 代码: #include <cs ...
- poj_2777线段树+位运算
第一次没想到用位运算,不出意料的T了,,, PS:在床上呆了接近两个月后,我胡汉三又杀回来刷题啦-- #include<iostream> #include<cstdio> # ...