动态加载storyBoards

时间:2013-11-28 10:04:19

标签: ios objective-c uistoryboard

我正在编写一个storyBoard加载系统,我需要检查是否存在特定的storyBoard。

我做了一个函数检查它(给定一个特定的StoryBoard名称):

(NSString *)ressourceNameForDevice:(NSString *)rootName extension:(NSString *)ext
{
    NSString *retString = rootName;
    NSString *iPadString = [NSString stringWithFormat:@"%@-iPad", rootName];
    NSString *iPhoneWideString = [NSString stringWithFormat:@"%@-wide", rootName];

    if (IS_IPAD &&
        (nil != [[NSBundle mainBundle] pathForResource:iPadString ofType:ext]))
    {
        retString = iPadString;
    }

    if (IS_IPHONE_WIDE &&
        (nil != [[NSBundle mainBundle] pathForResource:iPhoneWideString ofType:ext]))
    {
        retString = iPhoneWideString;
    }

    return retString;
}

我用@"storyboard"作为扩展参数调用此函数。

我的问题是该函数在nil != [[NSBundle mainBundle] pathForResource:iPhoneWideString ofType:ext]上失败,即使我的项目和包中存在storyBoard IS ,它也找不到。我想我应该给它另一个扩展,我尝试了@"nib",但没有更多结果。

任何人都知道如何检查?

2 个答案:

答案 0 :(得分:6)

解决了它。问题是,一旦storyBoard被编译,资源扩展名不是.storyboard而是.storyboardc,与.xib编译文件具有.nib扩展名的方式相同。

答案 1 :(得分:-1)

假设你的项目中有“xyz.storyboard”要加载。然后把它写成:

    UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"xyz"
                                                             bundle: nil];

应该做到这一点。