首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用UINib实例化和使用自定义UITableViewCells

如何使用UINib实例化和使用自定义UITableViewCells
EN

Stack Overflow用户
提问于 2012-05-10 12:07:20
回答 2查看 20.6K关注 0票数 16

在iOS5.0中,如何使用UINibs来实例化和使用表视图的UITableViewCell。我知道在iOS5.0中也需要使用一个registerNib:forCellReuseIdentifier:,但不确定如何使用它

事先感谢你在这方面的帮助

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-10 20:24:41

  1. 使用UITableViewCell作为顶级对象创建xib文件。这称为Cell.xib
  2. Create,一个基于此文件的UINib对象
  3. 将UINib注册到表视图中(通常在表视图控制器子类的viewDidLoad中)。

步骤2和步骤3可以组合在一起,因此您可以在viewDidLoad中使用以下行:

代码语言:javascript
复制
[self.tableView registerNib:[UINib nibWithNibName:@"Cell" bundle:nil] forCellReuseIdentifier:@"Cell"];

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

代码语言:javascript
复制
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];

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

票数 42
EN

Stack Overflow用户

发布于 2012-12-14 23:40:14

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

代码语言:javascript
复制
[self.tableView registerNib:[UINib nibWithNibName:@"Cell" bundle:nil] forCellReuseIdentifier:@"Cell"];

之前(在-viewDidLoad中)。

UITableView+Workaround.m:

代码语言:javascript
复制
@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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10527377

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档