如何以编程方式从 UINavigationController (storyboard) 切换到 UIViewController

Posted

技术标签:

【中文标题】如何以编程方式从 UINavigationController (storyboard) 切换到 UIViewController【英文标题】:How to segue from UINavigationController (storyboard) to UIViewController programmatically 【发布时间】:2017-03-27 01:47:33 【问题描述】:

我完全被这个问题难住了。

我有一个应用程序,它的视图控制器主要是在情节提要上制作的。然而, 有一些完全用代码(以编程方式)制作。

我的应用程序的入口点是一个 TabBarController,它提供给许多不同的导航控制器,每个导航控制器都有自己的 UIViewController。

这是一个视觉表示:

使用选项卡栏项导航到任何适当的视图控制器(在情节提要中表示)都没有问题。 但是,当我选择一个在情节提要上没有直接转场的选项卡栏项时 - 因为它的 UIViewController 完全通过代码构建 - 我无法转场到正确的类。

我已经向具有 ViewDidLoad() 函数的 NavigationController 添加了一个 *.swift 类。当我选择适当的选项卡栏项时,永远不会调用此函数。 奇怪的是,有一个 Navigation Controller 连接到 UIViewController(显示在情节提要中)并附加了一个 *.swift 文件。它的ViewDidLoad()在选择正确的选项卡条项时会调用。 我尝试附加多个 *.swift 文件(所有文件都继承自 UINavigationController),但我无法获得一个来调用适当的 ViewDidLoad() 函数。

编辑:正如您在图像中看到的,左下角的导航控制器没有从它延伸的 segue。但是,有一个附加到它的类,在它的 ViewDidLoad() 函数中是发生segue的地方

class WeaponsNavController: UINavigationController


    override func viewDidLoad()
              
         self.navigationController?.pushViewController(WeaponsTableVC(), animated: true)
    


如您所见,我正在尝试连接到 WeaponsTableVC(),它是一个完全通过代码创建的视图控制器。但是,尽管直接连接到情节提要中的导航控制器,但该类似乎根本没有被调用。

【问题讨论】:

您能否展示将程序化视图控制器添加到标签栏控制器的代码?另外,您在第二段开头指的是哪个导航控制器?一个以编程方式制作,还是在情节提要中没有根视图控制器? 【参考方案1】:

如果视图控制器没有关联的 nib 文件,则此方法将创建一个普通的 UIView 对象。 如果在实例化视图控制器时没有提供 nib 文件,UIViewController 会调用它的 loadView() 方法,该方法会创建一个普通的 UIView 对象并将其分配给它的视图属性。

// Assuming TestViewController is the view to load
let viewController = TestViewController()
navigationController?.pushViewController(viewController, animated: true)

希望这会有所帮助。

【讨论】:

以上是关于如何以编程方式从 UINavigationController (storyboard) 切换到 UIViewController的主要内容,如果未能解决你的问题,请参考以下文章

如何从以编程方式创建的 UITableView 中分离?

如何以编程方式从课堂加载故事板?

如何以编程方式从 UINavigationController (storyboard) 切换到 UIViewController

如何以编程方式从应用程序打开呼叫面板

如何以编程方式将音乐从 pc 同步到 iphone 音乐库? [关闭]

如何在android中以编程方式从通知栏中删除通知?