Swift 3 - 以编程方式切换到TableViewCell上的导航视图单击

时间:2017-07-19 10:12:06

标签: ios swift uiviewcontroller uinavigationcontroller

我是从Swift IOS开始的,只是有一个简单的问题。

我遵循了一系列指南,并且能够创建一个应用程序,您可以在其中使用按钮在视图之间切换。这些视图有一个导航控制器,所以你可以回去。

但是我想稍微调整一下。

相反,我希望单个视图从没有导航控制器开始。 然后,当单击我的表视图中的单元格时,我想导航到具有导航控制器的下一个视图。

我可以在界面构建器中使用segue实现这一点,但我不想通过构建器来管理它。这是因为当我对在表视图中单击的单元格进行一些检查时,我只想进入下一个视图。

所以基本上我需要以编程方式更改视图。

这是我到目前为止所做的:

  • 我有一个普通的View Controller。
  • 然后我旁边有一个导航控制器,之后链接到一个新的视图控制器。
  • 我为此View提供了presetController的故事板ID。

然后我在表格单元格onclick函数中有以下代码:

let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)

let nextViewController = storyBoard.instantiateViewController(withIdentifier: "presetController") as! PresetNavigationController
        self.present(nextViewController, animated:true, completion:nil)

现在这段代码将我带到下一个视图,但没有加载导航控制器。

如何让导航控制器链接到此视图?它已经通过编辑器选项卡链接嵌入到它...

感谢。

照片解释故事板:

StoryBoard

4 个答案:

答案 0 :(得分:0)

如果您的链接导航控制器来自新控制器并且您正在打开presntview控制器而不是您将作为此

  let nextViewController = storyBoard.instantiateViewController(withIdentifier: "presetController") as! PresetNavigationController

  let navController = UINavigationController(rootViewController: nextViewController)

  self.present(navController, animated:true, completion: nil)

答案 1 :(得分:0)

您需要将View Controller与导航控制器交换,然后执行以下代码:

let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)

let nextViewController = storyBoard.instantiateViewController(withIdentifier: "presetController") as! PresetNavigationController
        self.present(nextViewController, animated:true, completion:nil)

这将使您的导航栏返回按钮

答案 2 :(得分:0)

使用ppinho的建议我把导航控制器作为切入点。

由于我不想在第一个视图上使用导航控制器,因此我使用以下代码隐藏它:

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    // Hide the navigation bar on the this view controller
    self.navigationController?.setNavigationBarHidden(true, animated: animated)
}

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    // Show the navigation bar on other view controllers
    self.navigationController?.setNavigationBarHidden(false, animated: animated)
}

然后我将新视图添加到导航中,如下所示:

let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)

let nextViewController = storyBoard.instantiateViewController(withIdentifier: "presetController") as! PresetViewController

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

答案 3 :(得分:0)

在这里

let nextScreen = storyboard?.instantiateViewController(withIdentifier: "nextScreenIdentifier") as! NextScreenControllerName
self.navigationController?.pushViewController(nextScreen, animated: true)

将其写在viewcontroller的任何函数中。