簡體   English   中英

.xib文件如何與ViewController自動關聯並加載?

[英]How are .xib files being automatically associated and loaded with my ViewController?

我正在使用Xcode 8和Swift,而不是使用Storyboards。

我點擊Add-> Cocoa Touch Class,然后選中復選框以生成XIB。

我現在有FooViewController.swift和FooViewController.xib。 xib具有在“文件所有者”下設置的類。 據我所知,這是XIB與類之間的唯一關聯。 生成的類不包含任何加載XIB的內容。

我可以像這樣(從其他一些ViewController)創建和顯示此視圖控制器:

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

這可以正常工作,並且可以通過UI完整加載。 我不明白是為什么。 在線上的大多數指南和教程都建議ViewController需要手動加載XIB。

  • FooViewController的默認初始化程序中發生了什么?
  • XIB加載在哪里發生?
  • 如果我想覆蓋它並自己加載XIB怎么辦? (例如,也許我想為不同的設備使用不同的XIB。我知道,這不是最佳實踐,只是一個示例。)

從Xcode 4.5的一天開始,當我們曾經創建通用應用程序時

  1. 蘋果手機
  2. 的iPad

AppDelegate類中的didFinishLaunchingWithOptions中曾經有代碼可以為目標設備加載不同的XIB,因此它的作用與您上面的要求相同。 但是考慮到Xcode和Cocoa Framework的發展。 與編譯器自動為我們做很多事情相比,已經有了很長的路要走。

在這種特定情況下:

  1. 我們已經為XIB文件提供了文件所有者,因此,當您嘗試呈現該文件時,它會繼續運行,並在可用的導航器/文件中搜索(如果有XIB可用),如果找到了這樣的文件, UINib從捆綁並加載
  2. 如果沒有找到代碼,則當我們執行super.viewDidLoad()時,如果代碼沒有找到任何內容,它將轉到代碼中查找是否正在創建任何程序化視圖,它將為同一視圖控制器生成空白視圖。

如果我們仔細查看XIB文件,則XIB中有一個附加了主視圖的視圖插座,但是我們沒有創建這樣的插座,因此其將VC Source文件的自動生成的插座與XIB中的視圖相連。 如果有道理。

另外,請在下面找到一些代碼,以供tableView Context參考:

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

這應該可以解決您的查詢。 干杯!!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM