ios - .xib 文件如何自动关联并加载到我的 ViewController?

标签 ios iphone swift xcode cocoa-touch

我使用的是 Xcode 8 和 Swift,而不是使用 Storyboard。

我点击“Add”->“Cocoa Touch Class”并选中该框以生成 XIB。

我现在有了 FooViewController.swift 和 FooViewController.xib。 xib 在文件所有者下设置了类。据我所知,这是 XIB 和类(class)之间的唯一关联。生成的类不包含任何加载 XIB 的内容。

我可以像这样创建并显示这个 View Controller (来自其他一些 ViewController):

let foo = FooViewController();
self.navigationController!.pushViewController(foo, animated: true);

这可以工作并且它可以与 UI 一起加载。我不明白的是为什么。大多数在线指南和教程都建议 ViewController 需要手动加载 XIB。

  • FooViewController 的默认初始化程序中发生了什么?
  • XIB 加载发生在哪里?
  • 如果我想覆盖它并自己加载 XIB 怎么办? (例如,也许我想为不同的设备使用不同的 XIB。我知道这不是最佳实践,只是一个例子。)

最佳答案

从 Xcode 4.5 中我们用来创建通用应用程序的那一天开始,即 对于

  1. iPhone
  2. iPad

AppDelegate 类中的 didFinishLaunchingWithOptions 中曾经有代码为目标设备加载不同的 XIB,因此它的作用与您上面的要求相同。但考虑到 Xcode 和 Cocoa Framework 的演变。与编译器自动为我们做很多事情相比,它已经取得了很大的进步。

在这个特定场景中:

  1. 我们已经向 XIB 文件提供了文件所有者,因此当您尝试呈现它时,它会继续在可用的导航器/文件中搜索是否有可用的 XIB,如果找到这样的文件,则会加载UINib 从 bundle 中加载并加载
  2. 如果没有,则进入代码查找是否有 当我们执行 super.viewDidLoad() 时正在创建编程 View 一旦找不到任何内容,它就会为同一 View Controller 生成一个空白 View 。

如果我们仔细观察 XIB 文件,会发现 XIB 中有一个与主视图相连的 View 导出,但我们没有创建这样的导出,因此它将 VC 源文件的自动生成导出与 XIB 中的 View 连接起来。如果有道理的话。

另外,请在下面找到一些代码以供 tableView Context 引用:

let newAccountTableCellNib:UINib = UINib(nibName: "AccountTableCell", bundle: nil)
tableView.registerNib(self.newAccountTableCellNib, forCellReuseIdentifier: "AccountTableCell")

这应该可以解决您的疑问。干杯!!

关于ios - .xib 文件如何自动关联并加载到我的 ViewController?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40305127/

相关文章:

ios - Alamofire - 错误的请求

.net - 在 Objective-C 中使用 .NET Web 服务 [iPhone]

ios - 将值(value)从细节发送回主人

php - 通过 Twillion 将联系人分享到 iPhone

ios - 如何异步加载UITableViewcell图像,以便滚动不会滞后

ios - intersectsNode 未检测交叉点

iphone - 如何解决 uitableview 中对象的释放问题?

iphone - AVMediaTypeVideo 不适用于手电筒应用程序

ios - 在 Swift 3 中发布 JSON 请求

ios - 应该在什么队列上调用 completionHandler 来报告即时错误?