【问题标题】:Height of cells in different tableViews in iOSiOS中不同tableViews中单元格的高度
【发布时间】:2012-10-28 17:06:29
【问题描述】:

在我看来,我有三个不同的表。对于前两个表,我为每个单元格设置了一个固定高度(例如,第一个表的每个单元格为 30.0f,第二个表的每个单元格为 45.0f),我已根据每个表中的数据在情节提要中进行了调整。对于第三张表,我希望每个单元格有不同的高度。方法我试过了

(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

但是这种技术的问题是每个表都调用了这个方法。至于前两张表,我已经调整了情节提要中的高度,我不知道如何处理它们。如果我这样做了:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
if(tableView == myTable) {
    return 150.0;
}
}

由于其他情况下我没有任何回报,所以整个事情都失败了。 有什么建议吗?

【问题讨论】:

  • 如您所见,将一个UIViewController 分配给多个UITableView 作为委托和数据源是一个非常糟糕的主意。您可以使用三个不同的NSObject 子类,每个表视图一个,都保留在您的视图控制器中。然后你的问题就会自动消失。
  • 如果我已经做了很多工作,他们现在没有子类化就没有办法做到这一点,如果我开始对表进行子类化,这会更加混乱吗?
  • 不是表格,您需要为每个表格提供唯一的委托和数据源以更好地控制它们。

标签: iphone ios uitableview row-height


【解决方案1】:

您应该让您的视图控制器委托所有 3 个表视图,并在 heightForRowAtIndexPath 中检查哪个表调用了该方法:

所以在 viewDidLoad 中添加:

myTable1.delegate = self;
myTable2.delegate = self;
myTable3.delegate = self;

然后:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath     *)indexPath {
if(tableView == myTable1) {
return 150.0;
}
else if(tableView == myTable2) {
return 75.0;
}
else if(tableView == myTable3) {
return 75.0;
}

}

【讨论】:

  • 如果我不想(或者说我不能)以编程方式设置 myTable1 和 myTable2 的高度怎么办?
  • 如果 myTable1 和 myTable2 具有相同的行高,您可以这样设置:` - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { if(tableView = = myTable1) { 返回 150.0; } 其他 { 返回 75.0; } } `
【解决方案2】:

您需要返回其他表格的高度。

如果您在情节提要中设置了高度,您可以像这样访问该高度:

-(CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (tableView == myTable)
        return 150.0;

    return tableView.rowHeight;
}

tableView.rowHeight 将是您在情节提要中设置的高度

【讨论】:

    【解决方案3】:

    如何使用标签属性?将每个表的标签设置为唯一的数字,然后返回高度,如下所示:

    - (CGFloat) tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
    {
        if (tableView.tag == 1)
        {
            return 150;
        }
        return 250;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多