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 的高度(故事板)