【问题标题】:How to segue from UINavigationController (storyboard) to UIViewController programmatically如何以编程方式从 UINavigationController (storyboard) 切换到 UIViewController
【发布时间】: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(),它是一个完全通过代码创建的视图控制器。但是,尽管直接连接到情节提要中的导航控制器,但该类似乎根本没有被调用。

【问题讨论】:

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

标签: ios uinavigationcontroller uitabbarcontroller


【解决方案1】:

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

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

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2015-09-22
    • 2020-04-29
    • 1970-01-01
    • 1970-01-01
    • 2014-04-03
    • 1970-01-01
    • 2011-05-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多