一个XIB用于多个UITableViewCell子类

时间:2015-02-05 09:15:17

标签: ios objective-c uitableview xib custom-cell

我正在尝试将一个XIB文件用于多种类型的自定义UITableViewCell子类(相同的IBOutlets - 相同的外观 - 不同的方法和逻辑)。

我该怎么做?

1 个答案:

答案 0 :(得分:3)

严格地说,该框架不强制从xib到其文件所有者的严格绑定。您可以使用以下代码加载笔尖:

NSArray *nibContents = [[NSBundle mainBundle] loadNibNamed:@"EXCustomCell" owner:nil options:nil];
EXFirstCustomCell *firstCell = (EXFirstCustomCell*)[nibContents objectAtIndex:0];
firstCell.firstView = [firstCell.contentView viewWithTag:VIEW_TAG];
firstCell.button = [firstCell.contentView viewWithTag:BUTTON_TAG];

根据您的业务逻辑,您可以投放[nibContents objectAtIndex:0];的结果以适合您的自定义UITableViewCell课程。

编辑#1:

类型转换通常是一个坏主意,因为firstCell仍然是类UITableViewCell。一个好主意是创建自己的构造函数,将nibContents作为参数传递并在那里进行视图分配。

编辑#2

我做了一些实验,这就是我如何使用它:

  1. 创建一个独立的xib视图并在那里设计您的单元格。它必须是一种观点。你在这里做的是你正在定义contentView将如何。

  2. 从xib加载所有视图。NSArray *nibContents = [[NSBundle mainBundle] loadNibNamed:@"EXCommonContentView" owner:nil options:nil];

  3. 创建自定义单元格的构造函数,如下所示:

    -initWithNibContents:(NSArray*)nibContents {
        self = [super init]
        if(self) {
           self.contentView = [nibContents objectAtIndex:0];
           self.button = [self.contentView viewWithTag:BUTTON_TAG];
           self.view = [self.contentView viewWithTag:VIEW_TAG];
        }
     }