【发布时间】:2016-02-27 12:16:40
【问题描述】:
问题
我有一个带有单个视图控制器的单页应用程序。在屏幕上,有一个按钮可以滑出/滑入带有 TableView 的(较小的)UIView(功能正确)。我的目标是简化我的视图控制器,因此我的想法是将 UIView 与 TableView 拆分为它自己的视图控制器。因此,我在 Storyboard 中创建了第二个视图控制器并创建了一个类 HintsViewTableViewController,其中包含 TableView 数据源和委托方法。
主视图控制器
class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
var HintsViewTableVC = HintsViewTableViewController()
HintsViewTableViewController
class HintsViewTableViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
@IBOutlet weak var HintsViewTableView: UITableView!
@IBOutlet var hintsLabel: UILabel!
override func viewDidLoad() {
hintsLabel.text = "HINT" <---fatal error: unexpectedly found nil while unwrapping an Optional value
}
// MARK: - Table view data source
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
// #warning Incomplete implementation, return the number of sections
return 1
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete implementation, return the number of rows
return 4
}
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return CGFloat (40)
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath)
// Configure the cell...
cell.textLabel!.text = "\(indexPath.row)"
return cell
}
}
问题 如果情节提要入口点是主视图控制器,编译器会给出一个错误,指出我的属性 hintsLabel!为 nil 并崩溃。
如果我将情节提要入口点直接移动到 HintsViewTableViewController,则应用程序会运行并在屏幕上显示正确的视图。
问题 显然,直接初始化视图控制器的过程(使用情节提要入口点)不同于将视图控制器分配给变量(就像我在第一种情况下所做的那样)。我已经在各个方面搜索了 init 方法,但都是空白。
我尝试过的另一个解决方案:制作一个单独的 XIB 文件并将其链接到我的 HintsViewTableViewController,但是 XIB 文件中的 TableViews 不能有原型单元格。
我在这里遗漏了什么,或者说不同:将 UIView 分离到单独的视图控制器(在同一个 Storyboard 中)的正确程序是什么?
【问题讨论】:
标签: swift uiview uiviewcontroller