ios - 从 xib 文件加载 TestViewController(一切正常,但我有一个问题)
问题描述
我有一个TestViewController.swift
和一个TestViewController.xib
呈现 TestViewController 的布局。
要加载这个视图控制器,我有这个方法:
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 文件的名称有什么意义?在这种情况下,三个调用有什么区别?
解决方案
出色地,
如果您仅使用代码创建视图,您将在这一部分中使用,因为您从未告诉 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")
推荐阅读
- javascript - 使用向量的碰撞检测器
- android - 反应本机反应导航安全区域问题
- google-docs - 基于用户启用的下拉选项
- linq - 在 EF Core/LINQ 中查询多对多表
- javascript - 单击提交按钮后,反应表单未在屏幕上显示正确的输入
- apache-flink - 如何在 HDFS 中以 parquet 文件格式写入实时数据流 flink 数据
- ios - UIKit UIViewController viewDidLoad完成时如何在SwiftUI中获得通知
- javascript - 如何将叠加层添加到材质 UI 表格行?
- django - PostgreSQL 命令在 virtualenv 中不起作用
- flutter - 导航到新页面时防止颤动块状态更改