【问题标题】:Loading TestViewController from xib file (Everything works, but I have a question)从 xib 文件加载 TestViewController(一切正常,但我有一个问题)
【发布时间】:2020-11-08 10:42:30
【问题描述】:

我有一个 TestViewController.swift 和一个 TestViewController.xib 来展示 TestViewController 的布局。

要加载这个视图控制器,我有 this method:

let vc = TestViewController(nibName: "TestViewController", bundle: nil)
self.navigationController?.pushViewController(vc, animated: true)

一切正常,但如果我调用空初始化器:

let vc = TestViewController()
self.navigationController?.pushViewController(vc, animated: true)

或者使用 nil nibname

let vc = TestViewController(nibName: nil, bundle: nil)
self.navigationController?.pushViewController(vc, animated: true)

应用程序也可以继续工作而无需更改。明确指定 xib 文件的名称有什么意义?在这种情况下,三个调用有什么区别?

【问题讨论】:

    标签: ios swift uiviewcontroller uinavigationcontroller xib


    【解决方案1】:

    嗯,

    如果您仅使用代码创建视图,您将在这一部分中使用,因为您从未告诉 Xcode 加载 nib 文件,因此从未加载 nib 文件,因此您在 nib 文件中创建的项目永远不会加载。

    let vc = TestViewController()
    self.navigationController?.pushViewController(vc, animated: true)
    

    在这一部分中,您告诉 vc 需要首先从 nib 文件加载,您必须使用包含视图控制器的 nib 文件的名称。

    let vc = TestViewController(nibName: nil, bundle: nil)
    self.navigationController?.pushViewController(vc, animated: true)
    

    所以, 如果您使用的是 nib 文件,您将使用第二个,但如果您只使用代码来创建视图控制器,请使用第一个,但我通常使用 Storyboard 而不是使用 nib 文件来创建视图控制器。

    let storyboard = UIStoryboard(name: "storybardName", bundle: nil)
    let customViewController = storyboard.instantiateViewController(withIdentifier: "CustomViewController")
    
    

    【讨论】:

    • "如果您只使用代码创建视图,您将在这一部分中使用,因为您从未告诉 Xcode 加载 nib 文件,因此从未加载 nib 文件,因此您创建的项目在 nib 文件中永远不会加载。”为什么?我使用代码创建视图,并且 xib 中的视图加载得很好
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 2019-01-03
    • 2011-11-07
    • 2022-07-25
    • 2012-04-29
    • 2023-03-17
    相关资源
    最近更新 更多