如何制作一个两列的UITableViewController列表?

时间:2011-09-12 07:27:07

标签: iphone objective-c uitableview two-columns

我需要用两列列表呈现我的表视图。我通过覆盖drawRect(here)阅读了一些关于制作网格的相关帖子。但是,我正在寻找一种简单的方法来在nib中用IB设计我的单元格,然后加载它并在每一行上推两个单元格。 drawRect的示例不合适,因为它涉及手动设置位置。我只需要用一些自动调整来推动这两个单元格,就是这样。可能吗?

我正在寻找像(在cellForRowAtIndexPath中)的东西:

cell.contentView = emptyUIViewContainer;
[cell.contentView addSubview:FirstColumnUIView];
[cell.contentView addSubview:SecondColumnUIView];

我不需要为这两列提供两个单独的nib,因为每个列的格式与其他一些数据相同。有什么想法吗?

更新:直观地说,我正在尝试这样做:

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

  static NSString *CellIdentifier = @"Cell";
  UITableViewCell *cell1 = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
  if (cell1 == nil) {
    cell1 = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
  }
  // Configure the first cell.
  cell1.textLabel.text = ...some text

  // Configure the second cell
  UITableViewCell *cell2 = [[UITableViewCell alloc] init];
  cell2.textLabel.text = ...some text

  //set row as container for two cells    
  UITableViewCell *twoColumnRowView = [[UIView alloc] init]; //initWithFrame:CGRectMake(0, 0, 200, 20)];

  cell1.contentView.frame = CGRectMake(0, 0, 100, 20);
  [twoColumnRowView addSubview:cell1];
  cell2.contentView.frame = CGRectMake(100, 0, 100, 20);
  [twoColumnRowView addSubview:cell2];

  return twoColumnRowView; // cell;
}

这只是我现在正在玩的原型。但是代码在运行时崩溃了“由于未捕获的异常终止应用程序'NSInvalidArgumentException',原因:' - [UIView setTableViewStyle:]:无法识别的选择器发送到实例”

更新2.我已将代码更改为更实用。很奇怪,但经过几次尝试,我得到的应用程序工作没有崩溃,但在所有单元格中都有奇怪的黑色背景。这是代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
  static NSString *FirstCellIdentifier = @"FirstCellIdentifier"; 
  static NSString *SecondCellIdentifier = @"SecondCellIdentifier";

  // initialize first cell
  UITableViewCell *cell1 = [tableView dequeueReusableCellWithIdentifier:FirstCellIdentifier];

  if (cell1 == nil) {
    cell1 = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:FirstCellIdentifier] autorelease];
  }

  //initialize second cell
  UITableViewCell *cell2 = [tableView dequeueReusableCellWithIdentifier:SecondCellIdentifier];

  if (cell2 == nil) {
    cell2 = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:SecondCellIdentifier] autorelease];
  }

  cell1.textLabel.text = ...data
  cell2.textLabel.text = ...data

  UITableViewCell *twoColumnRowView = [[UITableViewCell alloc] init];

  [twoColumnRowView addSubview:cell1];
  //cell2.contentView.frame = CGRectMake(100, 0, 100, 20);
  [twoColumnRowView addSubview:cell2];

  return twoColumnRowView; // cell;
}

我没有重复使用twoColumnRowView,但其他人都这样做。

2 个答案:

答案 0 :(得分:1)

您不能(或至少不应该)将两个表视图放在一起。而且,正如您所知,表视图只有一列。

但是,您可以在每个单元格中放置尽可能多的数据。

您可以在Interface Builder中完成大部分操作。创建一个UITableViewCell的XIB。将几个UILabel拖放到正确的位置。您可以使用viewWithTag:方法查找标签来更新标签,但最好创建一个自定义UITableViewCell类,其属性指向每个标签。

由于表格对于UIKit来说是如此重要,因此Apple的文档集中有很多样本,并且有一些很好的WWDC会谈。您可以从iTunes下载视频。

答案 1 :(得分:0)

希望这会对你有帮助......

  

http://www.iphonedevx.com/?p=153

否则最好的方法是将两个表视图并排放置,如果它们需要独立滚动。

希望这会对你有帮助......