如何以编程方式从 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的主要内容,如果未能解决你的问题,请参考以下文章
如何以编程方式从 UINavigationController (storyboard) 切换到 UIViewController