UITableViewCell 故事板注册依赖于初始视图控制器?

Posted

技术标签:

【中文标题】UITableViewCell 故事板注册依赖于初始视图控制器?【英文标题】:UITableViewCell Storyboard Registration Dependent on Initial View Controller? 【发布时间】:2016-03-22 03:55:33 【问题描述】:

在我当前的 XCode 项目中,我有两个视图控制器。第一个,初始视图控制器,只有一个按钮。第二个视图控制器是UITableViewController 的子类。我在情节提要中定义了一个自定义表格视图单元格,给它一个重用标识符,并定义了一个自定义类并连接了相关的 IBOutlets。

启动应用程序后,当按下按钮时,第二个视图控制器通过self.presentViewController(secondViewController, animated: true, completion: nil) 模态显示在第一个视图控制器之上。两个视图控制器在情节提要中没有通过 segue 连接。在这个模态segue之后,在构建表的过程中,它崩溃并出现错误:

'unable to dequeue a cell with identifier PlaylistCell - must register a nib or a class for the identifier or connect a prototype cell in a storyboard'

但是,当表视图控制器是初始视图控制器时,它不会崩溃并正确显示所有数据。我想知道 nib 注册是否依赖于通过情节提要连接到初始视图控制器的视图控制器?

编辑:我发现了我的错误。对于发现自己遇到此问题的其他人,我正在初始化我的第二个视图控制器,例如:

let vc = SecondViewController()

但是如果你通过 Storyboard 设计它,你必须像这样初始化它:

let storyboard = UIStoryboard(name: "Main", bundle: nil) let vc = storyboard.instantiateViewControllerWithIdentifier("SecondViewController")

【问题讨论】:

【参考方案1】:

如您所见,您必须通过在情节提要中识别表格视图控制器来实例化它。

如果第二个控制器的情节提要与第一个相同,您也可以这样做:

if let storyboard = self.storyboard, controller = storyboard.instantiateViewControllerWithIdentifier("Second") as? UITableViewController 
    self.presentViewController(controller, animated: true, completion: nil)

这样您不必硬编码情节提要的名称,并且可以确保情节提要和视图控制器不为零并且可以呈现。

【讨论】:

以上是关于UITableViewCell 故事板注册依赖于初始视图控制器?的主要内容,如果未能解决你的问题,请参考以下文章

故事板:如何向原型 UITableViewCell 添加插座?

更改 UITableViewCell 内 UIView 的高度(故事板)

注册自定义 uitableviewcell 时出错

故事板 segue 调用顺序

从 UITableviewcell 移动到 ViewController 并使用故事板返回

带有故事板原型的 UITableViewCell 子视图的动态大小