本文原创,转载请注明出处!!
紧赶慢赶,拼了命的去学习工作,还是没有完成......伤心啊,自己的技术是在太差了,要学的东西太多,现在要做一个大一点的项目就显得力不从心了。
先把工作扔一边吧,虽然自己学的东西不多,不过还是把自己觉得有用的东西分享出来给大家看,让大家能够更快的学习,有时间多去学习学习,就不会像小白猪这样提笔忘词了。
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行的,依此类推,我总是想不通,望高手指明。