从框架加载xib文件

时间:2015-03-06 07:42:04

标签: xcode macos cocoa swift

我创建了一些我已经排序到框架中的代码 - 纯粹是因为我想在其他地方重用这些代码(其他osx应用程序 - 而不是iOS)。

在我的Resources文件夹中,我创建了一个xib文件。在我的根目录中高一级,我有相应的控制器文件。

如果我的客户端应用正在使用故事板 - 我将如何加载此视图?注意我确实设法访问上述控制器上的属性,所以我按照Apple文档和其他地方的描述完成了所有的连接。

提前致谢!

2 个答案:

答案 0 :(得分:1)

您必须将资源放在* .bundle中,而不是框架中。 只需创建一个捆绑的新目标。

然后用:

加载笔尖
NSString *resourceBundlePath = [[NSBundle mainBundle] pathForResource:@"myBundle" ofType:@"bundle"];
NSBundle *resourceBundle = [NSBundle bundleWithPath:resourceBundlePath];

// load View Controller from that
UIViewController *vc = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:resourceBundle];

答案 1 :(得分:0)

解决方案:以下是加载xib以在框架中创建视图的示例:

  1. 创建一个新捆绑包(例如:MyBundle.bundle),并将所有资源(例如:xib,图像,音频文件等)放入新捆绑包中。
  2. 加载xib:

    NSString *resourcePath = [[NSBundle mainBundle] resourcePath];
    NSString* path = [resourcePath 
    stringByAppendingPathComponent:@"MyBundle.bundle"];
    NSBundle *bundle = [NSBundle bundleWithPath:path];
    if(bundle)
    {
        self.view = [[bundle loadNibNamed:@"MyXibNameWithoutSuffix" owner:nil options:nil] lastObject];
    } else {
        self.view = [[[NSBundle mainBundle] 
    loadNibNamed:@"MyXibNameWithoutSuffix" owner:nil options:nil] lastObject];
    }
    
  3. 加载图片:

    UIImage* image = [UIImage imageNamed:@"MyBundle.bundle/MyImageName"];
    if(nil == image) {
       image = [UIImage imageNamed:@"MyImageName"];
    }
    
  4. 如果您使用的是共足动物,请确保s.resources已 在.podspec文件中设置。

    s.resources = "MyBundle.bundle/**/*.{png,jpeg,jpg,storyboard,xib,xcassets,plist}"