访问故事板中 UITableViewController 中定义的原型单元,以便在代码中实例化该类

Posted

技术标签:

【中文标题】访问故事板中 UITableViewController 中定义的原型单元,以便在代码中实例化该类【英文标题】:Accessing prototype cell defined in UITableViewController in storyboard for instantiation of that class in code 【发布时间】:2014-08-30 06:45:08 【问题描述】:

我有一个 UITableViewController,在我的故事板中定义了一个原型单元。我为此创建了 UITableViewController 的子类,并且我希望从代码中实例化 this 的新实例。我已经这样做了:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

    MyTableViewController *mtvc = [[MyTableViewController alloc] init];
    [self.navigationController pushViewController:mtvc animated:YES];
  

当我选择一行以调出新表格视图时出现异常,“无法将具有标识符 MyIdentifier 的单元格出列 - 必须为标识符注册一个 nib 或一个类或连接一个原型单元格故事板”

我认为这是因为原型单元是在情节提要中定义的,而不是在我的代码中。是否有一种正确的方法可以在我的代码中定义原型单元格,以便在我在代码中实例化 MyTableViewController 的实例时可以访问它?或者有没有办法访问故事板中的定义?

【问题讨论】:

【参考方案1】:

据我了解,我认为不是

MyTableViewController *mtvc = [[MyTableViewController alloc] init];

您应该尝试使用情节提要方法实例化表格视图控制器

– instantiateViewControllerWithIdentifier:

在这种情况下,您的表格视图控制器没有机会知道故事板中定义的原型单元格。

希望这会有所帮助。

【讨论】:

谢谢!这真的很好用。我希望你能做这样的事情,但我找不到答案。【参考方案2】:

如果您的单元格是情节提要中的原型单元格,则不应检查单元格是否=nil,然后再检查是否创建单元格。您只需使用重用标识符将单元格出列(也将重用标识符添加到情节提要原型单元格中)。所有这些都是在 cellForRowAtIndexPath 委托方法,而不是您发布的 didSelectRowAtIndexPath。有你的问题。

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


    MyCustomCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyCustomCell"];
    return cell*

【讨论】:

【参考方案3】:

最好在storyboard中创建一个push segue并调用[self performSegueWithIdentifier:@"Segue Identifier"]

如果您在MyTableViewController.m 中定义了cellForRowAtIndexPath:indexPath 方法,并且您像这样初始化单元格:

MyCustomCell *cell = [tableView dequeueReusableCellWithIdentifier:@"My Identifier"]

它应该可以工作。

【讨论】:

【参考方案4】:

谢谢大家的帮助。我设法让它工作。我最终继承了 UITableCell 并在那里定义了我的原型单元。然后我在 viewDidLoad 中为 MyTableViewController 注册该类,如下所示:

[self.tableView registerClass:[MyTableViewCell class] forCellReuseIdentifier:@"MyIdentifier"];

【讨论】:

以上是关于访问故事板中 UITableViewController 中定义的原型单元,以便在代码中实例化该类的主要内容,如果未能解决你的问题,请参考以下文章

故事板中的元素何时创建?

iOS - 故事板中的导航控制器

如何保存 AVPlayer 中的最后暂停时间,并在另一个故事板中寻找它?

如果 UINavigationController 在第一个故事板中,有没有办法在第二个故事板中显示 UINavigationController?

在故事板中隐藏导航栏

故事板中的 UITableView