如何检查重用标识符是不是已在 UITableView 中注册?
Posted
技术标签:
【中文标题】如何检查重用标识符是不是已在 UITableView 中注册?【英文标题】:How can I check if a reuse identifier has been registered with a UITableView already?如何检查重用标识符是否已在 UITableView 中注册? 【发布时间】:2012-03-22 19:19:44 【问题描述】:在 ios 应用程序中,我们必须在表格视图中注册 nib 文件,然后才能使用UITableView#dequeueReusableCellWithIdentifier
。
例子:
static NSString *myReuseIdentifier = @"MyReuseIdentifier";
UINib *cellNib = [UINib nibWithNibName:myReuseIdentifier bundle:nil];
[self.tableView registerNib:cellNib forCellReuseIdentifier:myReuseIdentifier];
有没有办法检查 Nib 是否已经在 UITableView 中注册?
我有一个自定义单元格,我在我的应用程序中的多个控制器的各种表格中使用它。我想将一些代码移动到宏中。类似的东西
-(CustomCell *)customCell:(UITableView *)tableView
static NSString *reuseIdentifier = @"MyReuseIdentifier";
if (![table hasAlreadyRegisteredNib:reuseIdentifier])
UINib *cellNib = [UINib nibWithNibName:reuseIdentifier bundle:nil];
[self.tableView registerNib:cellNib forCellReuseIdentifier:reuseIdentifier];
CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseIdentifier];
return cell;
【问题讨论】:
你为什么不在 viewDidLoad 方法中注册你的笔尖? 因为我想将它粘贴在一个跨多个控制器共享的宏中 但是由于您有不同的表,您必须为每个表注册 nib。 【参考方案1】:我不确定这是否是你想要的,但是
-dequeueReusableCellWithIdentifier:
如果单元格尚未准备好重用,则返回 nil
。否则,它会返回单元格,因此您可以简单地尝试。
【讨论】:
很棒的提示!所以我可以检查单元格是否为零,如果是,我将笔尖注册到表格中,然后返回单元格!谢谢 在 iOS 5 上依赖 nil 注册 NIB 时要小心。启用 VoiceOver 时有一个错误:在这种情况下,它总是返回 nil。所以你最终会进入一个无限循环注册循环。更多详情:***.com/a/13881778/235297【参考方案2】:我相信registerNib:forCellReuseIdentifier:
的目的是减少样板代码。你能在你的 viewDidLoad
方法中简单地调用一次吗?
【讨论】:
我试图避免在多个控制器之间重复相同的代码 - 我把它写成一个宏以上是关于如何检查重用标识符是不是已在 UITableView 中注册?的主要内容,如果未能解决你的问题,请参考以下文章