博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UITableView的嵌套使用
阅读量:6244 次
发布时间:2019-06-22

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

  本文原创,转载请注明出处!!  

  紧赶慢赶,拼了命的去学习工作,还是没有完成......伤心啊,自己的技术是在太差了,要学的东西太多,现在要做一个大一点的项目就显得力不从心了。

  先把工作扔一边吧,虽然自己学的东西不多,不过还是把自己觉得有用的东西分享出来给大家看,让大家能够更快的学习,有时间多去学习学习,就不会像小白猪这样提笔忘词了。

  UITableView是cocoa框架中使用的非常多的一个控件,相比其他控件还是有点复杂的,下面分享自己做的一个UITableView的嵌套的例子,效果是一个纵向的table,每一个节点里面又有一个横向的table,可以横向纵向滑动,类似土豆网iphone版的视频列表。

效果图如下:

 

 

其实原理非常简单,先定义一个普通的UITableView,设置它的行数和节点数。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{    return 1;//每个节点只有一行}-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{    return 7;//7个节点}- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{    return 140;//设置每一个节点的高}- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{    if ([indexPath section]==0) {        NSLog(@"indexPath section%d",[indexPath section]);        NSLog(@"rows === %d",[indexPath row]);//在这里可以添加点击触发执行的方法    }}

下面要注意了,是重点,作用是将每一个节点里都添加一个UITableView

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{    static NSString *cellname = @"Cell";    InfoCell *cell = (InfoCell *)[tableView dequeueReusableCellWithIdentifier:cellname];//InfoCell是一个类,在里面重新定义了横向的UITableView,下面有介绍    if (cell == nil){    cell = [[[InfoCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellname number:0]autorelease];        }    cell.selectionStyle = UITableViewCellSelectionStyleNone;    return cell;}

下面是InfoCell这个类的.m文件里的代码,不是很难,重点我会说明。

下面的方法中我只添加了_dataArray1,其实还有_dataArray2 ,_dataArray3,为了节省空间代码省去了。

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];    if (self) {                tableSection = [passValue passValue_]; //       porsection = tableSection.num;        hortable = [[UITableView alloc]initWithFrame:CGRectMake(100, -90, 140, 320) style:UITableViewStylePlain];        hortable.delegate = self;        hortable.dataSource = self;        [self addSubview:hortable];        hortable.transform = CGAffineTransformMakeRotation(M_PI / 2 *3);//这里是将table旋转270度,如果是90度的话,相当于整个横向的UITableView也反了。        NSString  *str = nil;        _dataArray1 = [[NSMutableArray alloc] initWithCapacity:0];        str = @"小白猪是头大笨猪!!!!";        [_dataArray1 addObject:str];        [_dataArray1 addObject:str];        [_dataArray1 addObject:str];//在数组里添加了一段字符串,在table中显示,各位可以在这里给每一行添加不同的字符串。不过需要做个判断    }    return self;}

接下来是设置具体的每一行,这里笨猪没有想到好的方法,因为cell会重用,我传了一个参数porsection来横向的table在纵向的table中的是在第几个节点的位置。如果有高手的话,请给出更好的方法,感激不尽。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{        static NSString *CellIdentifier1 = @"cell1";//每一行定义取不同的名字来取消重用。    static NSString *CellIdentifier2 = @"cell2";    static NSString *CellIdentifier3 = @"cell3";    static NSString *CellIdentifier4 = @"cell4";    static NSString *CellIdentifier5 = @"cell5";    static NSString *CellIdentifier6 = @"cell6";    static NSString *CellIdentifier7 = @"cell7";            switch (porsection) {            case 0:                cell = [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier1]autorelease];                cell.transform = CGAffineTransformMakeRotation(M_PI/2); //将cell中的文字旋转90度                [[cell textLabel] setText:[_dataArray1 objectAtIndex:indexPath.row]];                cell.textLabel.lineBreakMode = UILineBreakModeClip;                cell.textLabel.numberOfLines = 0;                break;            case 1:                cell = [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier2]autorelease];                cell.transform = CGAffineTransformMakeRotation(M_PI/2);                [[cell textLabel] setText:[_dataArray2 objectAtIndex:indexPath.row]];                cell.textLabel.lineBreakMode = UILineBreakModeWordWrap;                cell.textLabel.numberOfLines = 0;                break;                            case 2:                cell = [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier3]autorelease];                cell.transform = CGAffineTransformMakeRotation(M_PI/2);                [[cell textLabel] setText:[_dataArray3 objectAtIndex:indexPath.row]];                break;            case 3:                cell = [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier4]autorelease];                cell.transform = CGAffineTransformMakeRotation(M_PI/2);                [[cell textLabel] setText:[_dataArray4 objectAtIndex:indexPath.row]];                break;            case 4:                cell = [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier5]autorelease];                cell.transform = CGAffineTransformMakeRotation(M_PI/2);                [[cell textLabel] setText:[_dataArray5 objectAtIndex:indexPath.row]];                break;            case 5:                cell = [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier6]autorelease];                cell.transform = CGAffineTransformMakeRotation(M_PI/2);                [[cell textLabel] setText:[_dataArray6 objectAtIndex:indexPath.row]];                cell.textLabel.lineBreakMode = UILineBreakModeClip;                break;            case 6:                cell = [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier7]autorelease];                cell.transform = CGAffineTransformMakeRotation(M_PI/2);                [[cell textLabel] setText:[_dataArray7 objectAtIndex:indexPath.row]];                break;            default:                break;        }    return cell;} - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    return 200; }

还有一个困扰我的问题,我给每一行都添加不同的数据,为什么从第5行开始就重复第一行的内容,第6行重复第2行的,依此类推,我总是想不通,望高手指明。

 

转载于:https://www.cnblogs.com/xiaobaizhu/archive/2012/11/25/UITableView.html

你可能感兴趣的文章
【SAP HANA】关于SAP HANA中Analytic View创建、激活状况下在系统中生成对象的研究...
查看>>
ubuntu 12.04 ubuntu System program problem detected 解决方法
查看>>
c++智能指针《一》 auto_ptr
查看>>
我的代码观——关于ACM编程风格与librazy网友的对话
查看>>
Linux 总结2
查看>>
mysql C++ 使用
查看>>
android程序监听home键与电源键
查看>>
iOS中使用 Reachability 检测网络
查看>>
现场故障-数据量超出plsql developer结果集导致应用程序无数据现象
查看>>
Android -- sqlite数据库随apk发布
查看>>
JQuery操作表单相关使用总结
查看>>
将markdown格式转化为bootstrap风格html
查看>>
CSS3 Transitions属性打造动画的下载按钮特效
查看>>
eclipse 快捷键
查看>>
js常用的事件对象
查看>>
SharePoint 2013 禁用搜索服务
查看>>
[原]一个针对LVS的压力测试报告
查看>>
拥塞控制和流量控制
查看>>
[LeetCode] Sum Root to Leaf Numbers
查看>>
IO设计模式:Reactor和Proactor对比
查看>>