如何创建具有多行多列的表格视图?

Posted

技术标签:

【中文标题】如何创建具有多行多列的表格视图?【英文标题】:How do I create a tableview with multiple rows and multiple columns? 【发布时间】:2012-04-12 07:05:43 【问题描述】:

我知道如何创建一个单列多行的tableview,但我不知道如何创建一个多行多列的tableview。

谁能帮帮我?

【问题讨论】:

如果你需要它看起来不止一列,你应该创建你的自定义 tableviewcell @Buron 你能推荐任何关于我的问题的教程吗? 【参考方案1】:

这就是我的做法:

#import <Foundation/Foundation.h>

  @interface MyTableCell : UITableViewCell 

   
NSMutableArray *columns;
 

- (void)addColumn:(CGFloat)position;

@end

实现:

#import "MyTableCell.h"

#define LINE_WIDTH 0.25

@implementation MyTableCell

- (id)init

self = [super init];
if (self) 
    // Initialization code here.


return self;


 - (void)addColumn:(CGFloat)position 

[columns addObject:[NSNumber numberWithFloat:position]];
 

- (void)drawRect:(CGRect)rect 

CGContextRef ctx = UIGraphicsGetCurrentContext();
// Use the same color and width as the default cell separator for now
CGContextSetRGBStrokeColor(ctx, 0.5, 0.5, 0.5, 1.0);
CGContextSetLineWidth(ctx, LINE_WIDTH);

for (int i = 0; i < [columns count]; i++)

    CGFloat f = [((NSNumber*) [columns objectAtIndex:i]) floatValue];
    CGContextMoveToPoint(ctx, f, 0);
    CGContextAddLineToPoint(ctx, f, self.bounds.size.height);


CGContextStrokePath(ctx);

[super drawRect:rect];


@end

最后一块,cellForRowAtIndexPath

MyTableCell *cell = (MyTableCell *)[rankingTableView dequeueReusableCellWithIdentifier:MyIdentifier];
cell              = [[[MyTableCell alloc] initWithFrame:CGRectZero reuseIdentifier:MyIdentifier] autorelease];

【讨论】:

【参考方案2】:
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
  static NSString *cellIdentifier = @"MyCell";

  UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
  if (cell == nil) 
    // load cell from nib to controller's IBOutlet
    [[NSBundle mainBundle] loadNibNamed:@"MyTableCellView" owner:self options:nil];
    // assign IBOutlet to cell
    cell = myCell;
    self.myCell = nil;
  

  id modelObject = [myModel objectAtIndex:[indexPath.row]];

  UILabel *label;
  label = (UILabel *)[cell viewWithTag:1];
  label.text = [modelObject firstField];

  label = (UILabel *)[cell viewWithTag:2];
  label.text = [modelObject secondField];

  label = (UILabel *)[cell viewWithTag:3];
  label.text = [modelObject thirdField];

  return cell;

我认为这段代码会帮助你 UITableView 并不是真正为多列设计的。但是您可以通过创建自定义 UITableCell 类来模拟列。在 Interface Builder 中构建您的自定义单元格,为每一列添加元素。给每个元素一个标签,这样你就可以在你的控制器中引用它。

为您的控制器提供一个插座,以便从您的笔尖加载电池:

@property(nonatomic,retain)IBOutlet UITableViewCell *myCell;

然后,在您的表格视图委托的 cellForRowAtIndexPath 方法中,按标签分配这些值。

【讨论】:

以上是关于如何创建具有多行多列的表格视图?的主要内容,如果未能解决你的问题,请参考以下文章

快速具有多个部分和多行的表格视图

如何将多行和多列绑定到列表视图?

如何创建具有最大宽度的多行 UILabel?

具有多列的 UITableView 的多列标题

如何删除表格视图中的多行? [复制]

冻结 HTML 表格的多行多列