UITableViewCell故事板注册取决于初始视图控制器?

时间:2016-03-22 03:55:33

标签: ios xcode swift uitableview

在我目前的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'

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

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

let vc = SecondViewController()

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

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

1 个答案:

答案 0 :(得分:0)

如您所知,您必须通过在故事板中识别它来实例化表视图控制器。

如果第二个控制器的故事板与第一个控制器的故事板相同,您也可以这样做:

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

这样您就不必对故事板的名称进行硬编码,您可以确保故事板和视图控制器不是零并且可以显示。