如何检查重用标识符是不是已在 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 中注册?的主要内容,如果未能解决你的问题,请参考以下文章

如何检查 WPF 应用程序是不是已在运行? [复制]

如何检查视图控制器是不是已在 Swift 中关闭

如何检查用户 JID 是不是已在 XMPPFrameWork 中使用

如何检查电子邮件地址是不是已在使用 Firebase

如何检查对象是不是已在 C++ 中初始化/创建?

如何检查输入的电子邮件 ID 是不是已在 Paypal 中注册?