2

我想.xib为 iPhone 4 和 5 加载不同的内容。

我有三个文件FirstViewController.h, 我又添加了一个空FirstViewController.m文件并命名它。FirstViewController.xib.xibiPhone 5FirstViewController4Inch.xib

这是我的代码片段:

- (id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super initWithCoder:aDecoder];
    if (self) {
        if ([[UIScreen mainScreen] bounds].size.height == 480)
        {
            self = [super initWithNibName:@"FirstViewController.xib" bundle:nil];
        }
        else
        {
            self = [super initWithNibName:@"FirstViewController4Inch.xib" bundle:nil];
        }
        return self;
    }
    return self;
}

当我在 3.5 和 4 上运行我的应用程序时,它会给出错误:

Error:Could not load NIB in bundle:
4

6 回答 6

1

我认为这会起作用:

- (id)init
{
    if ([[UIScreen mainScreen] bounds].size.height == 480)
    {
        self = [super initWithNibName:@"FirstViewController" bundle:nil];
    }
    else
    {
        self = [super initWithNibName:@"FirstViewController4Inch" bundle:nil];
    }
    return self;
}

只要您使用以下方式以编程方式创建它:

myVC = [[MyViewController alloc] init];
于 2013-10-29T10:29:10.963 回答
1

省略 .xib 部分。

self = [super initWithNibName:@"FirstViewController" bundle:nil];
于 2013-10-29T10:29:17.423 回答
1

删除此行

self = [super initWithCoder:aDecoder];

还要确保两个 .xib 都将您的类作为文件所有者。

于 2013-10-29T10:29:33.730 回答
0

像这样改变你的方法:

- (id)init
{
    self = (IS_IPHONE5() ? [super initWithNibName:@"FirstViewController4Inch" bundle:nil] : [super initWithNibName:@"FirstViewController" bundle:nil]);

    if (self)
    {
        // Custom initialization
    }
    return self;
}

并使用宏IS_IPHONE5()

#define IS_IPHONE5()    ((UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) && [UIScreen mainScreen].bounds.size.height == 568)
于 2013-10-29T10:29:10.640 回答
0

用这个:

- (id)initForCustomScreen
{
    NSString *nibName = ([[UIScreen mainScreen] bounds].size.height == 480 ? @"FirstViewController" : @"FirstViewController4Inch");

    self = [super initWithNibName:nibName bundle:nil];
    if (self) {

        // initialisation code
    }

    return self;
}
于 2013-10-29T10:34:22.867 回答
0

解决方案是 Nickos 和 Maggie 的组合。这是使用视图控制器类名称提供 Nib 名称的合并解决方案:

- (id)initWithCoder:(NSCoder *)aDecoder
{
    if (self)
    {
        NSString* nibName = NSStringFromClass([self class]);
        if ([[UIScreen mainScreen] bounds].size.height == 480)
        {
            self = [super initWithNibName:nibName bundle:nil];
        }
        else 
        {
            self = [super initWithNibName:[nibName stringByAppendingString:@"4inch"] bundle:nil];
        }
        return self;
    }
    return self;
}
于 2014-01-25T00:53:46.173 回答