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

时间:2013-07-10 13:03:21

标签: ios xcode static-libraries

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

如果可能请添加完整的源代码

他们是第一个视图上的按钮。当点击该按钮时,新的视图控制器会出现一些东西(比如改变背景颜色)。如何为此创建静态库?这样我可以在另一个项目中使用它吗?

提前致谢

3 个答案:

答案 0 :(得分:7)

如果您想在构建静态库时使用界面构建器构建界面,则需要创建一个包并将其与您的库一起分发。

在Xcode中:

  1. 文件>新>目标
  2. 从OS X框架和库部分
  3. 中选择“Bundle”
  4. 填写详细信息。捆绑框架应该是核心基础。
  5. 然后,您需要在框架的同时编译捆绑包。将bundle添加到框架的“Target Dependencies”构建阶段。

    当你制作你的xib时,你创建了你创建的新包。

    然后,当您在派生数据目录中编译框架时,在框架二进制文件旁边,您将找到已编译的包。您将此信息与框架二进制文件一起提供给您的第三方。

    那么如何在代码中引用此包?在iOS捆绑包中无法加载,您的捆绑包实际上将在第三方的iOS应用程序主捆绑包内。您可以在NSBundle上创建一个类别,以便从代码中方便地访问您的包:

    @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;
    }
    

    然后,您可以在代码中访问您的包以加载xib,如下所示:

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

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

答案 1 :(得分:4)

严格地说,你不能将Xib添加到静态库是正确的。但是,有一些解决方法。 Matt Galloway的iOS Library With Resources教程将向您展示如何做到这一点。

请参阅iOS Library With Resources

答案 2 :(得分:0)

XIB就像资源一样,静态库是一个包含ur类的编译文件。您可以说这是您准备好使用的已编译代码。您无法将xib添加到静态库。