我正在尝试在静态库中添加 xib 文件或任何其他视图控制器文件,但我不能这样做。你能帮我么?
如果可能,请添加整个源代码
他们是第一个视图上的按钮。当点击那个按钮时,新的视图控制器会出现一些东西(比如说背景颜色的变化)。如何为此创建静态库?以便我可以在另一个项目中使用它?
提前致谢
我正在尝试在静态库中添加 xib 文件或任何其他视图控制器文件,但我不能这样做。你能帮我么?
如果可能,请添加整个源代码
他们是第一个视图上的按钮。当点击那个按钮时,新的视图控制器会出现一些东西(比如说背景颜色的变化)。如何为此创建静态库?以便我可以在另一个项目中使用它?
提前致谢
如果您想在构建静态库时使用界面构建器构建界面,您需要制作一个捆绑包并将其与您的库一起分发。
在 Xcode 中:
然后你需要在编译框架的同时编译你的包。将包添加到框架的“目标依赖项”构建阶段。
当你制作你的 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)“其他链接器标志”添加到他们的项目中
严格来说,不能将 Xib 添加到静态库中是正确的。但是,有一些解决方法。Matt Galloway 的 iOS Library With Resources 教程将向您展示如何做到这一点。
请参阅带有资源的 iOS 库。
XIB 就像资源,什么是静态库,一个包含你的类的编译文件。您可以说这是您的已编译代码可供使用。您不能将 xib 添加到静态库中。