访问故事板中 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 中定义的原型单元,以便在代码中实例化该类的主要内容,如果未能解决你的问题,请参考以下文章
如何保存 AVPlayer 中的最后暂停时间,并在另一个故事板中寻找它?
如果 UINavigationController 在第一个故事板中,有没有办法在第二个故事板中显示 UINavigationController?