2014-09-22 76 views
6

應用程序如何訪問用於啓動屏幕的XIB或故事板? XIB不在主包中(例如:NSBundle.mainBundle().pathsForResourcesOfType(nil, inDirectory: ""))。這是特別意外的,因爲「啓動Screen.xib」在「複製捆綁軟件資源」構建階段中列出,但不在捆綁中顯示IP,所以Xcode必須特別對待它。以編程方式訪問啓動屏幕XIB或故事板

回答

5

由於廈門國際銀行是不是在主束越來越路徑返回零,但是你可以使用方法

let launchScreenNib = UINib(nibName: "LaunchScreen", bundle: nil) 

您可以加載得到得到啓動畫面的XIB不帶路徑的幫助意見從廈門國際銀行作爲

// Swift 
let objects = NSBundle.mainBundle().loadNibNamed("LaunchScreen", owner: self, options: nil) 
let view = objects[0] as UIView 

// Obj C 
NSArray *objects = [[NSBundle mainBundle] loadNibNamed:@"LaunchScreen" owner:self options:nil]; 
UIView *view = [objects objectAtIndex:0]; 
+1

Xcode沒有生成啓動屏幕的NIB,所以這段代碼會崩潰。如果NIB不在捆綁中,那麼'bundle.loadNibNamed(...)'不起作用。我可以通過在Interface Builder中使用「用作啓動屏幕」選項來使它工作,這使Xcode能夠生成NIB。 – ide 2014-09-22 18:55:58

+0

@ide更新Xcode,默認情況下它會在項目創建過程中創建LaunchScreen.xib。 – 2014-09-23 02:07:23

+0

我的意思是我有LaunchScreen.xib,它在我啓動應用程序時顯示,只是Xcode不會將它轉換爲NIB文件並將其複製到包中。 – ide 2014-09-23 06:18:18

0

跟進,以我自己的問題,它看起來像切換「用作啓動屏幕」和關閉造成的Xcode打造爲發射畫面的NIB文件。

  1. 執行完整清理(刪除DerivedData)並從設備中刪除應用程序後,我在LaunchScreen.xib中爲主視圖控制器切換「用作啓動屏幕」。運行該應用程序導致它在沒有啓動屏幕的情況下啓動,但構建現在正在創建LaunchScreen.nib。
  2. 完成再次清理並從設備中刪除應用程序。切換爲「用作啓動屏幕」並重建。在新的DerivedData文件夾下的應用程序包中,LaunchScreen.nib仍然存在。
  3. bundle.loadNibNamed(...)現在工作得很好。

4

如果LaunchScreen是storyboard,而不是一個xib,使用下面的代碼。

let launchScreen = UIStoryboard(name: "LaunchScreen", bundle: nil).instantiateInitialViewController() 
if let launchView = launchScreen?.view { 
    view.addSubview(launchView) 
}