【问题标题】:How to use UINib to instantiate and use custom UITableViewCells如何使用 UINib 实例化和使用自定义 UITableViewCells
【发布时间】:2012-05-18 15:13:51
【问题描述】:

我将如何使用 UINibs 来实例化和使用 UITableViewCell 作为 iOS5.0 中的 tableview。我知道 iOS5.0 中有一个 registerNib:forCellReuseIdentifier: 也需要用到,但是不知道怎么用

提前感谢您对此的任何帮助

【问题讨论】:

标签: ios iphone uitableview cocoa-touch uikit


【解决方案1】:

@jrturtons 的答案是正确的,但不幸的是,iOS 5(在 iOS 6 中已修复)与 VoiceOver 一起存在一个错误:rdar://11549999UITableView 上的以下类别解决了该问题。只需使用-fixedDequeueReusableCellWithIdentifier: 而不是普通的dequeueReusableCellWithIdentifier:。当然,NIB 必须使用

[self.tableView registerNib:[UINib nibWithNibName:@"Cell" bundle:nil] forCellReuseIdentifier:@"Cell"];

之前(-viewDidLoad)。

UITableView+Workaround.m:

@implementation UITableView (Workaround)
- (id)fixedDequeueReusableCellWithIdentifier:(NSString *)identifier {
    id cell = [self dequeueReusableCellWithIdentifier:identifier];
    if (!cell) {
        // fix for rdar://11549999 (registerNib… fails on iOS 5 if VoiceOver is enabled)
        cell = [[[NSBundle mainBundle] loadNibNamed:identifier owner:self options:nil] objectAtIndex:0];
    }
    return cell;
}
@end

【讨论】:

  • 我已经多次阅读过有关此错误的信息,但从未遇到过 — 即使在运行 VoiceOver 的 iOS 5.0 上也是如此。我相信实际问题远比这复杂。
【解决方案2】:
  1. 使用 UITableViewCell 作为顶级对象创建您的 xib 文件。这称为 Cell.xib
  2. 根据这个文件创建一个UINib对象
  3. 将 UINib 注册到表视图(通常在表视图控制器子类的 viewDidLoad 中)。

第 2 步和第 3 步可以合并使用,因此您可以在 viewDidLoad 中使用以下行:

[self.tableView registerNib:[UINib nibWithNibName:@"Cell" bundle:nil] forCellReuseIdentifier:@"Cell"];

然后,在 cellForRowAtIndexPath 中,如果您想要 nib 中的一个单元格,则将其出列:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];

这要么从 nib 创建一个新实例,要么使现有单元出列。

【讨论】:

  • 我实际上只是自己实现了 Cell Reuse Identifier,它工作得非常好!
  • 您的解决方案是绝对正确的,但不幸的是,iOS 5(在 iOS 6 中已修复)与 VoiceOver 一起存在一个错误:openradar.appspot.com/11549999
  • 在加载单元格时,我想以编程方式自定义背景颜色(因为 bg 颜色是图案图像)。有可能吗?
  • @Satyamsvv 是的,在单元子类中使用 awakeFromNib。如果比这更复杂,请提出一个新问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-21
  • 2015-08-30
  • 1970-01-01
  • 1970-01-01
  • 2020-09-10
相关资源
最近更新 更多