pushViewController无法工作

6

我是一个新手,对于使用 SwiftSWRevealViewController 的 iOS 开发不太熟悉。我遇到了一个问题!在我的侧边菜单(场景 TableViewController 中有两条蓝线),每当选择一行时,应该打开特定的 场景(视图控制器),但不幸的是它没有打开。虽然在表格中选择行时 didselectRowAt 会触发,但 pushViewController 却无法工作。

  func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

        let dvcStoryBordId = menuViewIds[(indexPath.row - 1 )]

        let viewController = storyboard?.instantiateViewController(withIdentifier: dvcStoryBordId )

        self.navigationController?.pushViewController(viewController!, animated: true)
    }

故事板

enter image description here

我有没有漏掉什么?这是正确的方法吗?self。

更新:

self.navigationControllernil。是否有其他选择?或者不使用导航

更新:

故事板ID

menuViewIds = ["shareWithFriends","deliveryTracking", "controls", "support","myAccount"]

运行时视图

enter image description here


2
请调试并检查self.navigationController不为空。 - Vikram Biwal
1
使用“导航控制器”创建您的“菜单控制器”。 - Vikram Biwal
1
从你的故事板图像中看来,你的 Slide TableViewController(带蓝线的那一个)没有被包含在一个导航控制器中,因此 navigationController 是 nil。所以,你可以将其包含在一个 navigationController 中,或者仅仅在 Slide TableViewController 上使用 present - pbodsk
不客气。它能正常工作了吗? - pbodsk
1
@pbodsk 还不是一个好主意。 - cristan lika
显示剩余5条评论
2个回答

1

试试这个:

   func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

         let dvcStoryBordId = menuViewIds[(indexPath.row - 1 )]
         let viewController = storyboard?.instantiateViewController(withIdentifier: dvcStoryBordId )
         var navigationController = UIApplication.sharedApplication().keyWindow?.rootViewController as! UINavigationController
         navigationController?.pushViewController(viewController!, animated: true)

   }

它可以运行,但返回按钮没有显示…我该怎么办? - cristan lika
please check now. - Vikram Biwal
让我们在聊天室中继续这个讨论 - cristan lika
无法将类型为'LifeFast.ViewController' (0x10e127910)的值转换为类型为'UINavigationController' (0x1109adf18)。 - cristan lika
你指的是哪一个? - cristan lika
显示剩余5条评论

0

试试这个:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

         let dvcStoryBordId = menuViewIds[indexPath.row]
         let viewController = storyboard?.instantiateViewController(withIdentifier: dvcStoryBordId )
         let vc = windowRootViewController() as! SWRevealViewController
         let nvc = vc.frontViewController as! UINavigationController
         nvc.pushViewController(viewController, animated: true)
   } 

WindowRootVC():

func windowRootViewController() -> UIViewController {
    return (UIApplication.shared.delegate?.window??.rootViewController)!
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接