如何在 Swift 4 中使用 xibs 加载 initialVewController? (我不想用 StoryBoard 设置 initialViewController)

Posted

技术标签:

【中文标题】如何在 Swift 4 中使用 xibs 加载 initialVewController? (我不想用 StoryBoard 设置 initialViewController)【英文标题】:How to load initialVewController using xibs in Swift 4 ? (I don't want to set initialViewController with StoryBoard) 【发布时间】:2017-09-30 17:45:56 【问题描述】:

我想用 xibs 加载初始视图控制器,而不是用情节提要。由于我正在将目标 c 项目迁移到 swift 4。任何人都可以解决这个问题吗?

【问题讨论】:

这是众所周知的并且有据可查。请在询问之前搜索。不要让我们为你做研究。 【参考方案1】:

要将 xib 作为初始视图控制器而不是情节提要加载,您可以按照以下示例代码中的暗示实现此目的,

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool 

    loadInitialVC()
    return true


func loadInitialVC() 
    let testVC = TestNibViewController(nibName: "TestNibViewController", bundle: nil) as? TestNibViewController
    window?.rootViewController = testVC

您在使用我在尝试时遇到的 xib 时可能会遇到问题,因此,如果您发现任何问题,如“已加载 nib 但未设置视图出口”,请按照所附图像进行操作。

【讨论】:

使用此解决方案后出现此错误 *** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“在捆绑包 NSBundle 中找不到名为“Main”的情节提要/shubhamjain /Library/Developer/CoreSimulator/Devices/4840E2AD-9393-442E-B079-BD3FF893FFFD/data/Containers/Bundle/Application/A4105540-A128-4A9B-8337-985724F3FF2B/SwiftDemo.app>(已加载)' 您已要求加载 xib,但现在您正尝试按照错误提示打开“主”情节提要?【参考方案2】:

尝试编辑您的 Info.plist:删除 主故事板文件基本名称 键并添加 主 nib 文件基本名称 键和基本名称(不带 .xib ) 的初始 XIB。

【讨论】:

【参考方案3】:

我找到了我的问题的解决方案,在 swift 4 中加载 xib 作为 initialViewController 的正确方法

func application(_ application: UIApplication, didFinishLaunchingWithOptions 
     launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool 

   self.window = UIWindow(frame: UIScreen.main.bounds)
   let testVC = MyViewController(nibName: "MyViewController", bundle: nil) as? MyViewController
   let navigationBar = UINavigationController.init(rootViewController: testVC!)
   window?.rootViewController = navigationBar
   window?.makeKeyAndVisible()
   return true

希望这个解决方案对其他人也有帮助。

【讨论】:

有人对这个解决方案投了反对票。在解决方案之前,我试图在包括堆栈溢出在内的各种链接上找到解决方案,但我没有得到正确的解决方案,但是当我找到解决方案时,有人在没有解释他的原因的情况下投了反对票。请也分享原因,这将对其他人有所帮助为什么你投了否定票,那么他的智慧将受到赞赏。

以上是关于如何在 Swift 4 中使用 xibs 加载 initialVewController? (我不想用 StoryBoard 设置 initialViewController)的主要内容,如果未能解决你的问题,请参考以下文章

如何在swift中按下按钮从另一个xib文件加载另一个xib文件

将 Xib 的大小调整为 swift 4 的屏幕大小

如何使用Swift 3从Xib加载NSView

如何在 Objective-C 控制器中以编程方式加载用 swift 编写的自定义 XIB 视图

如何正确子类化从 Swift 中的 xib 加载的视图类?

使用 Swift 3 Xcode 8 加载时缺少自定义 XIB