如何在iOS中的静态库中添加xib文件

我想在静态库中添加xib文件或任何其他视图控制器文件,但我不能这样做。 你能帮我么?

如果可能的话,请添加整个源代码

他们是第一个视图上的button。 当点击那个button时,新的视图控制器会产生一些东西(让我们说改变背景颜色)。 如何为此创build静态库? 这样我可以在另一个项目中使用它?

提前致谢

严格来说,不能将Xib添加到静态库中是正确的。 但是,有解决方法。 马特加洛韦的iOS资源库教程将告诉你如何做到这一点。

使用资源查看iOS库 。

如果要在构build静态库时使用接口构build器构build接口,则需要创build一个包并将其与库分发。

在Xcode中:

  1. 文件>新build>目标
  2. 从OS X Framework和Library部分select“Bundle”
  3. 填写细节。 捆绑框架应该是核心基础。

然后,您需要在您的框架的同时获得您的包编译。 将该包添加到您的框架的“目标相关性”构build阶段。

当你制作你的xib时,你可以把他们的目标制作成你创build的这个新的包。

然后,当你在派生的数据目录中编译你的框架,在你的框架二进制文件旁边,你会发现你的编译包。 你把这个和框架二进制一起交给你的第三方。

那么你如何在你的代码中引用这个包呢? 在iOS中,bundle不能被加载,而你的bundle实际上将在第三方的iOS应用程序主包中。 您可以在NSBundle上创build一个类别,以方便地从您的代码访问您的包:

@interface NSBundle (mybundle) +(NSBundle *)myBundle; @end @implementation NSBundle (mybundle) static NSBundle * _myBundle; +(NSBundle *)myBundle{ static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ NSBundle * mainBundle = [NSBundle mainBundle]; NSString * pathToMyBundle = [mainBundle pathForResource:@"myBundle" ofType:@"bundle"]; NSAssert(pathToMyBundle, @"bundle not found", nil); _myBundle = [NSBundle bundleWithPath:pathToMyBundle]; }); return _myBundle; } 

然后你可以在代码中访问你的bundle,像这样加载xib:

 UIViewController * controller = [[UIViewController alloc] initWithNibName:nil bundle:[NSBundle myBundle]]; 

请记住,如果在框架代码中使用类别,则需要确保框架使用者将-all_load (或-all_load如果不使用最近的Xcode)“其他链接器标志”添加到其项目中

XIB就像资源和静态库是一个包含你的类的编译文件。 你可以说这是你准备好使用的编译好的代码。 您不能将xib添加到静态库。