【发布时间】:2010-10-07 02:56:07
【问题描述】:
问题很简单:如何从 Xib 文件中加载自定义 UITableViewCell?这样做允许您使用 Interface Builder 来设计您的单元格。由于内存管理问题,答案显然并不简单。 This thread 提到了这个问题并提出了解决方案,但它是在 NDA 发布之前并且缺少代码。这是一个long thread,它讨论了这个问题,但没有提供明确的答案。
这是我用过的一些代码:
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];
}
要使用此代码,请创建 UITableViewCell 的新子类 MyCell.m/.h,并为所需的组件添加 IBOutlets。然后创建一个新的“空 XIB”文件。在 IB 中打开 Xib 文件,添加一个 UITableViewCell 对象,将其标识符设置为“MyCellIdentifier”,并将其类设置为 MyCell 并添加您的组件。最后,将IBOutlets 连接到组件。请注意,我们没有在 IB 中设置文件的所有者。
如果 Xib 没有通过额外的工厂类加载,其他方法提倡设置文件的所有者并警告内存泄漏。我在 Instruments/Leaks 下测试了上述内容,没有发现内存泄漏。
那么从 Xibs 加载单元的规范方法是什么?我们设置文件的所有者吗?我们需要工厂吗?如果是这样,工厂的代码是什么样的?如果有多种解决方案,让我们阐明每种解决方案的优缺点...
【问题讨论】:
-
有人可以编辑主题以实际提出问题,即“如何从 Xib 文件加载自定义 UITableViewCells?” (如果这在 stackoverflow 上是不可能的,请忽略。)
-
对于 iOS 5 及更高版本,这是解决方案:stackoverflow.com/questions/15591364/…,与 giuseppe 的解决方案相同。
-
快速注释,更简单(2013 年环境)在这里回答stackoverflow.com/questions/15378788/… jamihash
标签: ios uitableview object cocoa-touch xib