我正试图将一个XIB文件用于多种类型的自定义UITableViewCell子类(相同的IBOutlets-相同的外观-不同的方法和逻辑)。
我该怎么做?
严格来说,框架并没有强制从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
我做了一些实验,下面是我如何做到这一点的:
创建一个独立的xib视图并在那里设计你的单元格。它必须是一种观点。你在这里所做的是定义
contentView
将如何从xib加载所有视图。
NSArray *nibContents = [[NSBundle mainBundle] loadNibNamed:@"EXCommonContentView" owner:nil options:nil];
创建自定义单元格的构造函数,如下所示:
-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]; } }