从 NIB 加载自定义 UITableViewCell 问题

Posted

技术标签:

【中文标题】从 NIB 加载自定义 UITableViewCell 问题【英文标题】:Custom UITableViewCell problem loading from NIB 【发布时间】:2011-04-18 12:25:52 【问题描述】:

更新:我现在解决了这个问题 - 请参阅我自己的评论。令人惊讶的是,写下问题的频率可以在您再次解决问题时得到解决!


我一定已经阅读了 SO 上的每个线程和 Apple 上的示例,但我无法让它在我的情况下工作,我想知道我做错了什么?

我使用 XCode 4 在 IB 中创建了一个自定义单元格。文件的所有者设置为表格的自定义视图控制器的类,并且我有一个用于 UITableView 单元格的 IBOutlet,据我所知,该单元格已连接好.我通常通过代码完成所有表格单元格并使用快速滚动方法,但对于这个项目,我确实需要使用 nibs 来加载单元格内容,而且我有些悲伤,我无法弄清楚。

所以在我的接口文件中我有;

@interface myCustomTableViewController <various delegates> 

   UITableViewCell *customNibCell;
   ...     


@property (nonatomic,assign) IBOutlet UITableViewCell *customNibCell;

在 customTableViewController 中,我在 cellForRowAtIndexPath 中执行此操作;

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

    if (cell == nil) 

        [[NSBundle mainBundle] loadNibNamed:@"DirectoryCellWithMenu" owner:self options: nil];

        cell = customNibCell;
        self.customNibCell = nil;

     

     [self configureCell:cell atRow:indexPath.row];

我的 configureCell 方法这样做是为了进入单元格并取出我希望自定义的内容。

UIImageView *fileImageView = (UIImageView *)[cell viewWithTag:3];
UILabel *headingTextLabel = (UILabel *)[cell viewWithTag:4];
UILabel *modifiedTextLabel = (UILabel *)[cell viewWithTag:5];
UILabel *sizeTextLabel = (UILabel *)[cell viewWithTag:6];

问题

在我看到正确布局的情况下,单元格确实可以加载到表格中。此外,我在各种按钮上定义的自定义操作都可以正常触发,因此似乎单元已正确连接。

但是没有任何自定义工作 - 例如,我似乎无法更改任何标签的文本,并且在调查中,每个 [cell viewWithTag:nn] 的结果都是 nil清楚地指出了问题,但我看不出是什么原因。

    的标识符 UITableViewCell 设置为 "customDirCell" 标签的对象标识 等确实是 3,4,5,6 根据 IB xib 恰好包含 1 个对象, UITableViewCell

我看不出 nib 文件创建或代码有什么问题,但我显然遗漏了一些东西!

任何善良的灵魂都可以阐明我应该寻找的地方吗?

【问题讨论】:

ARGGGH。好的,所以我发现了问题。我将对象 ID 标识(由 IB 设置)与 Tag 属性混淆了——这是我需要手动设置的。希望这可以帮助其他可能陷入与我相同的陷阱的人! 【参考方案1】:

你试过了吗

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

    if (cell == nil) 

       NSArray *nib =  [[NSBundle mainBundle] loadNibNamed:@"DirectoryCellWithMenu" owner:self options: nil];

        cell =[nib objectAtIndex:0];
        self.customNibCell = nil;

     

【讨论】:

【参考方案2】:

我已经根据我的评论解决了这个问题。

【讨论】:

以上是关于从 NIB 加载自定义 UITableViewCell 问题的主要内容,如果未能解决你的问题,请参考以下文章

从 NIB 与从代码加载自定义滑块:从代码加载时不存在子视图

从 NIB 加载自定义 UITableViewCell 问题

从 nib 加载自定义 UIView 会导致无限循环或抛出 nil 异常

将自定义 UITableViewCell 从 nib 加载到 Swift 中的 UIViewController

如何获取从 nib ios 加载的自定义视图的实际大小

从 nib 文件在自定义视图中设置自定义委托