iPhone SDK,在ViewDidAppear上或在运行时的任何时候替换XIB / NIB文件?

时间:2014-03-17 15:39:08

标签: ios iphone objective-c interface-builder

我有一个iPhone / iPad应用程序屏幕,其中包含我在两个界面构建器文件(xib / nib)中定义的两种可能的布局。当应用程序启动时,我会查看userdefaults并选择要加载的那个。

但是,如果用户选择设置按钮并加载应用内设置菜单并更改布局,则点击导航按钮返回上一屏幕,如何将用户界面/ xib文件更改为新没有重新启动应用程序的选择?

谢谢。

2 个答案:

答案 0 :(得分:0)

您可以使用以下方法强制加载XIB:

[[NSBundle mainBundle] loadNibNamed:@"XIBName" owner:self options:nil];

修改

尝试以下方法:

在可以在任何地方使用的实用程序类中添加以下内容。

+ (id)loadNibNamed:(NSString *)nibName ofClass:(Class)objClass {
    if (nibName && objClass) {
        NSArray *objects = [[NSBundle mainBundle] loadNibNamed:nibName 
                                                         owner:nil 
                                                       options:nil];            
        for (id currentObject in objects ){
            if ([currentObject isKindOfClass:objClass])
                return currentObject;
        }
    }

    return nil;
}

然后拨打电话:

MyClass *myClassInstance = [Utility loadNibNamed:@"the_nib_name" 
                                         ofClass:[MyClass class]];

另见:Single View controller with multiple nibs?

答案 1 :(得分:0)

MyUIViewController *controller;
if (IS_IPAD){
  controller = [[MyUIViewController alloc] initWithNibName:@"MyUIViewController_iPad" bundle:nil];
} else {
  controller = [[MyUIViewController alloc] initWithNibName:@"MyUIViewController_iPhone" bundle:nil];
}

你可以从导航控制器

推送
[self.navigationController pushViewController:controller animated:YES];