2014-09-22 78 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) 
}