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

Posted

技术标签:

【中文标题】如何在iOS的静态库中添加xib文件【英文标题】:how to add xib file in static library in iOS 【发布时间】:2013-07-10 13:03:21 【问题描述】:

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

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

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

提前致谢

【问题讨论】:

***.com/questions/6859143/…看看这个可能对你有帮助。 当我们创建静态库时,它会提供我们需要在其中编写代码的 .h 和 .m 文件。是的,我们可以轻松编写斐波那契函数。如果我想在第一个视图中显示表格视图怎么办。因为我没有任何 xib 文件。我可以创建一个函数,并且可以以编程方式创建 tableview。如果我们选择任何单元格,则需要出现新的视图控制器。请你指导一下。 【参考方案1】:

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

在 Xcode 中:

    文件>新建>目标 从 OS X 框架和库部分选择“Bundle” 填写详细信息。 bundle 框架应该是核心基础。

然后你需要在编译你的框架的同时编译你的包。将包添加到框架的“目标依赖项”构建阶段。

当你制作你的 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)“其他链接器标志”添加到他们的项目中

【讨论】:

天啊——这是赢家。即使在 Xcode 7 中它也对我有用。许多较旧的教程都错过了将包添加为目标依赖项的步骤。谢谢! 这不再起作用(在 Xcode 9 中),我在构建库时收到“iOS xibs 不支持目标设备类型“mac””错误。【参考方案2】:

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

见iOS Library With Resources。

【讨论】:

它确实有效,尽管可能需要额外的步骤才能将捆绑包放入父项目。我必须检查... 如果可能的话,你能把创建库的步骤发给我,在 .h 和 .m 文件中添加 xib 文件 那么您已经按照galloway.me.uk/tutorials/ios-library-with-resources 中的所有步骤进行操作了吗?您是否仔细检查了所有内容? 好的,是否必须将整个库项目添加到我们要访问库项目的每个项目中。还是只需要添加 .a 文件? 库项目将产生两个产品:一个静态库 .a 文件和一个资源包 .bundle 文件。您需要将这两个添加到每个想要使用它们的项目的构建阶段【参考方案3】:

XIB 就像资源,什么是静态库,一个包含你的类的编译文件。您可以说这是您的已编译代码可供使用。您不能将 xib 添加到静态库中。

【讨论】:

您好,我们无法添加 xib 文件。但是是的,我们可以在 uikit 框架中添加按钮或来自 uikit 库的任何其他对象。但我的问题是如何在静态库中从一个视图控制器导航到另一个视图控制器 我不明白,静态库的导航代码将与我们通常使用的相同。如果您想在库中使用 UI,则建议使用子视图而不是使用视图控制器... 好的,现在如何添加子视图 这将清除所有blog.montgomerie.net/… 创建静态库后,是否总是需要添加整个代码(项目)ob 库或仅添加 .a 文件?

以上是关于如何在iOS的静态库中添加xib文件的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 中为通用应用程序添加新的两个 XIB 文件?

如何在框架内加载 `.xib` / `.nib` 文件?

如何在 iOS 中使用文件 xib 自定义键盘

从bundle中加载xib

Xcode:如何在 UIScrollView 中从 XIB 文件添加自定义视图

如何将 UITableView 作为子视图添加到 xib 中的 UIView?