繁体   English   中英

当我的tableView在TabBar中时,pushViewController不起作用

[英]pushViewController don't work when my tableView is in an TabBar

我在TabBar中有一个TableViewController。 当我选择tableView的一个单元格时,我想用pushViewController(MyNewController)启动一个新的控制器。

这是我的代码:

在我的TableView中:

  func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
            let storyboard = UIStoryboard(name: "Main", bundle: nil)
            let myController = (storyboard.instantiateViewControllerWithIdentifier("MyViewController") as? MyViewController)!
            myController.parameter = self.tableau[indexPath.row]
            UINavigationController().pushViewController(myController, animated: true)
        }

在我的TabBar中:

func viewDidLoad() {
    super.viewDidLoad()
    var controllerArray: [UIViewController] = []

    let controller: UIViewController = ClubPreviewListViewController()
    controller.title = "TEST"
    controllerArray.append(controller)

    self.view.addSubview(pageMenu!.view)
  }

(我使用CAPSPageMenu来自定义我的TabBar,但这不是问题,我没有相同的问题)

在我的控制器中:

deinit {
    print ("TEST")
  }

当我选择一个单元格时,每次选择时日志都会写入“TEST”,但不会更改视图。

我认为这是我的navigationController问题,但我不知道如何解决它。

在我实现TabBar之前,我单独使用TableView,推送确实有效。

对不起我的英语不好 ! 谢谢你的帮助。

编辑:

我改变了我的pushViewController:

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let myController = (storyboard.instantiateViewControllerWithIdentifier("MyViewController") as? MyViewController)!
    myController.parameter = self.tableau[indexPath.row]
    //UINavigationController().pushViewController(myController, animated: true)
    self.navigationController?.pushViewController(myController, animated: true)
  }

同样的反应。

我的NavigationController没有直接链接到我的TabBar。 我需要创建另一个吗? 我真的不明白NavigationController是如何工作的!

这是我的配置

EDIT2:

如果我使用我的TabBar的navigationController而不是我的TableView,视图会改变!

self.saveTabBarNavigationController.pushViewController(myController, animated: true)

尝试这个只有你有一个导航嵌入式tabbar控制器才能工作

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
            let storyboard = UIStoryboard(name: "Main", bundle: nil)
            let myController = (storyboard.instantiateViewControllerWithIdentifier("MyViewController") as? MyViewController)!
            myController.parameter = self.tableau[indexPath.row]
            navigationController.pushViewController(myController, animated: true)
        }

您正在线上创建导航控制器的实例

UINavigationController().pushViewController(myController, animated: true)

一旦此方法完成执行,导航控制器及其视图控制器将被取消分配,因为没有任何东西保留您的导航控制器。 导致'TEST'打印在你的deinit()函数中。

您应该获得拥有当前标签栏控制器并使用该控制器推送到堆栈的导航控制器。 在不知道应用程序结构的情况下,很难知道导航控制器的位置(如果存在)。

检查你的故事板,但基本上尝试:

self.navigationController.pushViewController(myController, animated: true)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM