我一直在努力切换viewControllers。
我得到了以下故事板:
左上角的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)!
有什么线索吗?
答案 0 :(得分:0)
永远不要永远不要打电话给dequeueReusableCellWithIdentifier:
。始终使用dequeueReusableCellWithIdentifier:forIndexPath:
代替。它永远不会返回nil
单元格,如果有问题,它会给你一个很好的错误信息来解释原因。
我期望会发生的是,您会收到一条错误消息,告知您没有连接到故事板中的原型单元格。然后你必须找出原因。当然,获取单元标识符是至关重要的:它必须与您的代码的重用标识符完全匹配,包括拼写。但它还有更多的东西。也许您忘了在故事板中设置表视图控制器的自定义类。或者您可能已经获得了表视图控制器的错误实例 - 即,您创建了一个新实例而不是从故事板获取实际实例,即具有原型单元的实例。