1

我有一个分组样式UITableView,旨在显示固定数量的部分,每个部分又具有一组固定的单元格,类似于设置应用程序。单元格是自定义的并且在它们之间是不同的:其中一些有一个文本字段,另一个有一个开关,另一个有一个按钮。

我知道处理这种情况的两种方法:

1)通过 IBUITableViewCell在同一个 nib 文件中包含控件和子控件。UITableView然后,为每个单元格及其包含的控件(文本字段、开关和按钮)设置出口,并在需要时设置操作。这样,我的表格视图的cellForRowAtIndexPath:方法如下所示:

- (UITableViewCell *)tableView:(UITableView *)tv cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
   UITableViewCell *cell = nil;

   if (indexPath.section == 0) {
      switch (indexPath.row) {
        case 0: {
            cell = firstCell;
            break;
        }
        case 1: {
            cell = secondCell;
            break;
        }
        case 2: {
            cell = thirdCell;
            break;
        }
        case 3: {
            cell = fourthCell;
            break;
        }
        default:
            break;
      }
   }

   else if (indexPath.section == 1) {
    switch (indexPath.row) {
        case 0: {
            cell = fifthCell;
            break;
        }
        case 1: {
            cell = sixthCell;
            break;
        }
        default:
            break;
      }
   }

   return cell;
}

2)为我拥有的每个自定义单元格类型创建一个单独的 nib 文件和UITableViewCell子类,然后像下面的代码片段一样加载它们。在这里,我为管理表视图的视图控制器中的每个单元格合成了属性:

- (UITableViewCell *)tableView:(UITableView *)tv cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
   UITableViewCell *cell = nil;

   if (((indexPath.row == 0) && (indexPath.section == 0) && (firstCell == nil))
        || ((indexPath.row == 1) && (indexPath.section == 0) && (secondCell == nil))
        || ((indexPath.row == 0) && (indexPath.section == 1) && (fifthCell == nil))) {

        NSArray* views = [[NSBundle mainBundle] loadNibNamed:@"TypeACell" owner:nil options:nil];

        for (UIView *view in views) {
            if ([view isKindOfClass:[UITableViewCell class]])
            {
                cell = (TypeACell *)view;
            }
        }

        // Cell contained controls settings

   }

   else if (((indexPath.row == 2) && (indexPath.section == 0) && (thirdCell == nil))) {
      NSArray* views = [[NSBundle mainBundle] loadNibNamed:@"TypeBCell" owner:nil options:nil];

        for (UIView *view in views) {
            if ([view isKindOfClass:[UITableViewCell class]])
            {
                cell = (TypeBCell *)view;
            }
        }

        // Cell contained controls settings
   }

   else {
      NSArray* views = [[NSBundle mainBundle] loadNibNamed:@"TypeCCell" owner:nil options:nil];

        for (UIView *view in views) {
            if ([view isKindOfClass:[UITableViewCell class]])
            {
                cell = (TypeCCell *)view;
            }
        }

        // Cell contained controls settings
   }    

   return cell;
}

最好的方法是什么?或者它可能是另一种不同的方式......每种方法都有哪些内存管理问题?在第一个中,当从 IB 为单元格及其控件设置插座时,单元格将自动设置为strong属性,并将其控件设置为weak属性。那是对的吗?如果遵循第二种方法,我是否也应该将单元格的属性设置为strong?在这两种情况下,是否应该重复使用单元格,即使它是具有已知和固定单元格的表格?

我已经对这个问题做了一些研究,但我没有说清楚......

谢谢!

4

2 回答 2

0

使用第二种方法,为单元格创建单独的类以及 nib 文件。它很容易重复使用。

是的,您必须声明单元格的属性很强大。ARC 将负责内存管理,您只需在其作用域完成后将其设置为 nil。

在这里,在您的情况下,您有固定的单元格,但将来您可能会扩展它。

于 2013-07-10T09:29:55.147 回答
0

当涉及到这些静态表格视图时,我个人在免费的Sensible TableView框架方面取得了巨大的成功。

于 2013-07-10T18:41:43.173 回答