【问题标题】:One XIB for multiple UITableViewCell subclasses一个 XIB 用于多个 UITableViewCell 子类
【发布时间】:2015-04-05 01:55:33
【问题描述】:

我正在尝试将一个 XIB 文件用于多种类型的自定义 UITableViewCell 子类(相同的 IBOutlets - 相同的外观 - 不同的方法和逻辑)。

我该怎么做?

【问题讨论】:

  • 你使用的是单一的 tablview 吗?

标签: ios objective-c uitableview xib custom-cell


【解决方案1】:

严格来说,框架不会强制从 xib 到其文件所有者的严格绑定。您可以使用以下代码加载 nib:

NSArray *nibContents = [[NSBundle mainBundle] loadNibNamed:@"EXCustomCell" owner:nil options:nil];
EXFirstCustomCell *firstCell = (EXFirstCustomCell*)[nibContents objectAtIndex:0];
firstCell.firstView = [firstCell.contentView viewWithTag:VIEW_TAG];
firstCell.button = [firstCell.contentView viewWithTag:BUTTON_TAG];

根据您的业务逻辑,您可以转换[nibContents objectAtIndex:0]; 的结果以适合您的自定义UITableViewCell 类。

编辑#1:

类型转换通常是个坏主意,因为firstCell 仍然是UITableViewCell 的类。一个好主意是创建自己的构造函数,将nibContents 作为参数传递并在那里进行视图分配。

编辑#2

我做了一些实验,下面是我如何让它工作的:

  1. 创建一个独立的 xib 视图并在那里设计您的单元格。它必须是一个视图。您在这里所做的是定义contentView 将如何。

  2. 从xib.NSArray *nibContents = [[NSBundle mainBundle] loadNibNamed:@"EXCommonContentView" owner:nil options:nil];加载所有视图

  3. 像这样创建自定义单元格的构造函数:

    -initWithNibContents:(NSArray*)nibContents {
        self = [super init]
        if(self) {
           self.contentView = [nibContents objectAtIndex:0];
           self.button = [self.contentView viewWithTag:BUTTON_TAG];
           self.view = [self.contentView viewWithTag:VIEW_TAG];
        }
     }
    

【讨论】:

    猜你喜欢
    • 2015-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-17
    • 2010-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多