簡體   English   中英

如何在iOS中的靜態庫中添加xib文件

[英]how to add xib file in static library in iOS

我試圖在靜態庫中添加xib文件或任何其他視圖控制器文件,但我不能這樣做。 你能幫我么?

如果可能請添加完整的源代碼

他們是第一個視圖上的按鈕。 當點擊該按鈕時,新的視圖控制器會出現一些東西(比如改變背景顏色)。 如何為此創建靜態庫? 這樣我可以在另一個項目中使用它?

提前致謝

如果要在構建靜態庫時使用接口構建器構建接口,則需要創建一個包並將其與庫一起分發。

在Xcode中:

  1. 文件>新建>目標
  2. 從OS X Framework和Library部分選擇“Bundle”
  3. 填寫詳細信息。 捆綁框架應該是核心基礎。

然后,您需要在框架的同時編譯捆綁包。 將包添加到框架的“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]];

請記住,如果在框架代碼中使用類別,則需要確保框架使用者將-all_load (或-all_load如果不使用最新的Xcode) -ObjC到其項目中的“其他鏈接器標志”

嚴格來說,無法將Xib添加到靜態庫是正確的。 但是,有一些解決方法。 Matt Galloway的iOS Library With Resources教程將向您展示如何做到這一點。

請參閱iOS資源庫

XIB就像資源和靜態庫一樣,是一個包含ur類的編譯文件。 您可以說這是您准備好使用的已編譯代碼。 您無法將xib添加到靜態庫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM