在 Interface Builder 中自定义 UITableViewCell
Posted
技术标签:
【中文标题】在 Interface Builder 中自定义 UITableViewCell【英文标题】:Customizing UITableViewCell in Interface Builder 【发布时间】:2012-01-28 06:53:54 【问题描述】:在两个类中,我对 UITableViewCell 进行了子类化,以便进行一些主要的自定义。我想使用 Xib 文件将 UI 布局代码的数量保持在最低限度。我遇到了一个奇怪的例外:
if (!cell)
if (indexPath.row == 0)
cell = [[[SearchCellTop alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier] autorelease];
NSArray* objects = [[NSBundle mainBundle] loadNibNamed:@"SearchCellTop" owner:cell options:nil];
cell = (SearchCellTop*)[objects objectAtIndex:0];
else
cell = [[[SearchCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier] autorelease];
NSArray* objects = [[NSBundle mainBundle] loadNibNamed:@"SearchCell" owner:cell options:nil];
cell = (SearchCell*)[objects objectAtIndex:0];
这似乎适用于加载 Xib。但是,一旦我尝试执行以下操作:
if (indexPath.row < [self tableView:tableView numberOfRowsInSection:indexPath.section])
((SearchCell*)cell).Product = [products objectAtIndex:indexPath.row];
我得到 -[UIAccessibiltyBundle setProduct:] 无法识别的选择器发送到实例
一切都表明“单元格”的类型正确,但我仍然收到此错误。
【问题讨论】:
【参考方案1】:来自 Apple 的 + (BOOL)loadNibNamed:(NSString *)aNibName owner:(id)owner
方法的开发者文档:
所有者
指定为 nib 文件所有者的对象。如果这个对象的类有一个关联的包,则在那个包中搜索指定的 nib 文件;否则,此方法会在主包中查找。
在您的情况下,所有者应为 nil(或特定的捆绑包,如果相关)。
在代码中,将 loadNibNamed 方法的调用更改如下:
NSArray* objects = [[NSBundle mainBundle] loadNibNamed:@"SearchCellTop" owner:nil options:nil];
NSArray* objects = [[NSBundle mainBundle] loadNibNamed:@"SearchCell" owner:nil options:nil];
【讨论】:
以上是关于在 Interface Builder 中自定义 UITableViewCell的主要内容,如果未能解决你的问题,请参考以下文章
在 Interface Builder 中定义“通用”segue
在 Interface Builder 中使用泛型类作为自定义视图
如何使用 Interface Builder 中的自定义 UITableViewCell?