问题很简单:如何从Xib文件加载自定义UITableViewCell
?这样做允许您使用Interface Builder来设计单元格。由于内存管理问题,答案显然并不简单。这个线程提到了这个问题,并提出了一个解决方案,但是nda发布之前,缺乏代码。下面是一个长线程,它讨论了这个问题,但没有提供一个确定的答案。
下面是我使用的一些代码:
static NSString *CellIdentifier = @"MyCellIdentifier";
MyCell *cell = (MyCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:CellIdentifier owner:self options:nil];
cell = (MyCell *)[nib objectAtIndex:0];
}
要使用这段代码,创建MyCell.m/.h, UITableViewCell
的一个新子类,并为你想要的组件添加IBOutlets
。然后创建一个新的“Empty XIB”文件。在IB中打开Xib文件,添加一个UITableViewCell
对象,将其标识符设置为“MyCellIdentifier”,并将其类设置为MyCell并添加组件。最后,将IBOutlets
连接到组件。注意,我们没有在IB中设置文件的所有者。
其他方法主张设置文件的所有者,如果Xib没有通过额外的工厂类加载,则警告内存泄漏。我在Instruments/Leaks下测试了上面的内容,没有发现内存泄漏。
那么从xib加载单元格的规范方法是什么呢?我们设置文件的所有者吗?我们需要工厂吗?如果是,工厂的代码是什么样子的?如果有多种解决方案,让我们来阐明每一种方案的优缺点。