如何在 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文件