无法调用tableViewController

时间:2015-10-04 15:58:57

标签: ios swift uitableview uiviewcontroller uinavigationcontroller

我一直在努力切换viewControllers。

我得到了以下故事板:

storyboard

左上角的VC是登录VC,它通过模态segue将视图推送到MainViewController(左下角)。

这可以通过以下方式正常工作:

self.performSegueWithIdentifier("MainSegue", sender: self)

MainViewController托管一个“菜单”栏项,单击该项后会启动cocoa控件SSASideMenu并显示LeftSideMenu VC。这也很好。

LeftSideMenu VC有2个菜单项(“home”和“order”)。项目“home”将返回MainViewController(下面的案例0 - 工作正常)。项目“订单”需要呈现ItemTableViewController(右上角),它基本上是一个tableVC,其中原型单元嵌入在导航控制器中。

下面的案例1是出错的地方:

func tableView(..........) {

    tableView.deselectRowAtIndexPath(indexPath,animated: true)

    switch (indexPath.row) {
        case 0: 
            sideMenuViewController?.contentViewController =
                UINavigationController(rootViewController: MainViewController())
            sideMenuViewController?.hideMenuViewController()
        break 
        case 1: 
            sideMenuViewController?.contentViewController =
                UINavigationController(rootViewController: ItemTableViewController())
            sideMenuViewController?.hideMenuViewController()
        break
    }
}

因此,情况1将导致调用ItemTableViewController的func tableView:

func tableView(tableView: UITableView, cellForRowAtIndexPath ...) {

    let cellIdentifier = "MenuItemTableViewCell"
    let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier) as! MenuItemTableViewCell!

    let item = items[indexPath.row]

    cell.cellTitle.text = item.name // **cell is always nil**

    ....

细胞永远是零。

我尝试注册课程(即使我不应该使用故事板,因为我使用故事板):

    let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier) as! MenuItemTableViewCell!
    if cell == nil {
            tableView.RegisterClass(MenuItemTableViewCell.self, forCellReuseIdentifier: cellIdentifier)
            cell = MenuItemTableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: cellIdentifier)

    let item = items[indexPath.row]

    cell.cellTitle.text = item.name // **cell is still nil**

我也用segue尝试了它但是在LeftSideMenu错误中得不到segue(它与正确的cellIdentifier一起存在)。

底线是我无法调用ItemTableViewController(右上方tableVC)!

有什么线索吗?

1 个答案:

答案 0 :(得分:0)

永远不要永远不要打电话给dequeueReusableCellWithIdentifier:。始终使用dequeueReusableCellWithIdentifier:forIndexPath:代替。它永远不会返回nil单元格,如果有问题,它会给你一个很好的错误信息来解释原因。

我期望会发生的是,您会收到一条错误消息,告知您没有连接到故事板中的原型单元格。然后你必须找出原因。当然,获取单元标识符是至关重要的:它必须与您的代码的重用标识符完全匹配,包括拼写。但它还有更多的东西。也许您忘了在故事板中设置表视图控制器的自定义类。或者您可能已经获得了表视图控制器的错误实例 - 即,您创建了一个新实例而不是从故事板获取实际实例,即具有原型单元的实例。