如何从情节提要中加载原型单元?

Posted

技术标签:

【中文标题】如何从情节提要中加载原型单元?【英文标题】:How do you load a prototype cell from a storyboard? 【发布时间】:2014-03-07 17:46:08 【问题描述】:

有没有办法加载原型单元以及故事板中定义的任何 IBOutlet 连接?

更新

我想对单元格(那个母校的 UICollectionViewCell)进行单元测试,因此想在 UIViewController 上下文之外加载它。

实际上,就像您可以从 nib 加载自定义视图一样,指定其文件的所有者并设置其 IBOutlet(s)。

【问题讨论】:

您应该将 IBOutlets 连接到 UITableViewCell 的自定义子类的接口。 【参考方案1】:

编辑:据我所知,除了您在其中创建的 ViewController 之外,无法使用 Storyboard 中的原型 UITableViewCells。

我还没有在单元测试中尝试过这个,但你可以轻松地将自定义 UITableViewCell 放入单独的 nib。

要在您的视图控制器中使用它,您需要将单元格注册到您的 tableViews。

UINib *nib = [UINib nibWithNibName:@"ABCNameOfYourNibCell" bundle:nil];
[self.tableView registerNib:nib forCellReuseIdentifier:@"myCustomCell"];

然后在cellForRowAtIndexPath:中使用这样的单元格

static NSString *CellIdentifier = @"myCustomCell";

ABCNameOfYourNibCell *cell = 
[tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

为了您的测试目的,您应该能够:

ABCNameOfYourNibCell *testCell = 
[[ABCNameOfYourNibCell alloc] initWithStyle: UITableViewCellStyleDefault reuseIdentifier:nil];

如果你需要测试reuse-behaviour,你应该在这里设置一个reuseIdentifier,并在cell上调用prepareForReuse

【讨论】:

我认为答案是“否”,唯一的方法就是将其声明为独立的 nib,对吧?【参考方案2】:

通常你创建一个UITableViewControllerUITableView。比你还应该创建一个UITableViewCell 类。创建UITableViewCell 类后,转到`UIStoryboard,选择单元格:

然后在Identity Inspector里面设置UITableViewCell类:

现在将元素添加到 UITableViewCell 并将它们与您的类连接

现在在Attributes Inspector 中添加CellIdentifier

没有到你的UITableViewControllerUIViewController 那里你有UITableViewDelegate 方法并像这样调用你的单元格(不要忘记#import UITableViewCell 类在你的@987654339 的顶部@:

- (UITableViewCell *)tableView:(UITableView *)tableView 
         cellForRowAtIndexPath:(NSIndexPath *)indexPath 

    static NSString *CellIdentifier = @"MyIdentifier";
    MyCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier 
                                                   forIndexPath:indexPath];

    [cell.label setText:[NSString stringWithFormat:@"My Cell at Row %ld", 
                         (long)indexPath.row]];      
    return cell;

【讨论】:

你能说得更具体些吗?你的意思是如果原型单元作为 IBOutlet 连接到视图控制器? 对不起最后一个问题,你想从另一个UIViewController加载单元格,这应该是你要找的 作为问题的无关答案是如何在单独的测试类中加载在情节提要中创建的原型单元。

以上是关于如何从情节提要中加载原型单元?的主要内容,如果未能解决你的问题,请参考以下文章

在情节提要中加载 UIWebView 时出错

使用 xib 创建可重用的 UIView(并从情节提要中加载)

如何连接故事板中的原型单元?

如何从情节提要以编程方式加载 UIViewController?

从情节提要中模拟 UIViewController

如何在情节提要中向原型 UITableViewCell 添加渐变背景颜色?