【问题标题】:Opening specific ViewController when selecting item from side menu?从侧面菜单中选择项目时打开特定的 ViewController?
【发布时间】:2015-07-22 22:06:34
【问题描述】:

我有CenterTableViewController,左,右 中心是应用程序启动时的主视图,左右是侧边菜单,在导航控制器上滑动或单击时打开。Buttons 左和右TableViewControllers 都有它们的项目数,右一个有大约 10 个。当单击这 10 个项目中的一个时,它需要弹出一个特定的ExampleViewControllerViewController 出现时没有导航控制器(我需要它),并且在那个导航控制器中我需要一个后退按钮,它将把我送回CenterTableViewController

到目前为止,我联系到RightTableViewController,在它的类中,女巫的名字相同,我有这个方法

 override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

        switch (indexPath.row){

    case 0:

        break;
    case 1:

        break;
    case 2:

        break;
    case 3:

        break;
    case 4:

        break;
    case 5:

        let VC = self.storyboard?.instantiateViewControllerWithIdentifier("Kurs_Evra") as! KursEvraViewController

        self.navigationController?.pushViewController(VC, animated: true)


        break;
    case 6:

        break;
    case 7:

        break;
    case 8:

        break;
    case 9:

        break;

    default:
        println("JBG")
    }
}

在案例 5 中,它会打开我需要的 ViewController,但它会在 RightTableViewController 而不是 Center 中打开(因为“自我”部分)。

另外,当它打开时,如何在刚刚打开的ViewController 上创建导航控制器和后退按钮?

【问题讨论】:

    标签: ios swift uinavigationcontroller viewcontroller


    【解决方案1】:

    这并不难。

    转到您的右侧或左侧菜单,在类中创建方法 didSelectRowAtIndex 路径,并使用上面的 switch 语句。

    然后,如果发布您需要的代码,这就是您在导航堆栈和主 ViewController 上方发布新故事板的方式

    让 Example = self.storyboard?.instantiateViewControllerWithIdentifier("ExampleViewController") as! ExampleViewController

    让 navController = UINavigationController(rootViewController: Example)

    最后……

    self.presentViewController(navController, 动画: true, 完成: nil)

    使用“present”将打开您创建的新控制器,在本例中为 ExampleViewController,它将位于新导航堆栈中的第一个。如果您希望关闭或模拟后退按钮,只需将操作连接到按钮并调用:

    self.dismissViewController(navController, 动画: true, 完成: nil)

    【讨论】:

      【解决方案2】:

      如果您的中心视图控制器具有导航控制器,则将其用于导航。例如,在您的右侧导航控制器中,不是推送视图控制器,而是触发通知以导航到该页面。 然后在您的中心控制器中监听通知并从那里进行导航。

      这是你应该做的:

      在案例 5 的 switch 语句中,将代码更改为:NSNotificationCenter.defaultCenter().postNotificationName("MenuItemNotification", object: "Kurs_Evra")

      在你的 CenterViewController 的 viewDidLoad 方法中,添加:

      NSNotificationCenter.defaultCenter().addObserverForName("MenuItemNotification", object: nil, queue: NSOperationQueue.mainQueue()) { [weak self] notif in
      
              if let strongSelf = self {
      
                  if let segueIdentifier = notif.object as? String {
      
                      strongSelf.performSegueWithIdentifier(segueIdentifier, sender: nil)
      
                  }
      
              }
      
          }
      

      在上面的代码中,我假设您有一个名为 Kurs_Evra 的 segue 设置,而不仅仅是一个故事板 ID。如果您不想使用 segue,请使用案例 5 的代码

      【讨论】:

      • 是的,Center VC 有一个导航控制器。但是你能给出那个通知触发的示例代码吗,包括右边和中心的 VC。
      猜你喜欢
      • 2018-09-28
      • 1970-01-01
      • 2014-08-19
      • 1970-01-01
      • 1970-01-01
      • 2018-03-02
      • 2014-11-28
      • 1970-01-01
      相关资源
      最近更新 更多