1

我正在开发一个应用程序。我正在使用基于单一视图的应用程序模型创建通用应用程序。所以,我需要创建一个新类。但是,它只提供一个 xib。我需要两个适用于 iPhone 和 iPad 的 xib。请告诉我如何为一个类创建两个 xib。

4

2 回答 2

3

创建一个具有相同名称的新 .. 假设您的视图控制器名称是“NewViewController” .. 您的 xib 将NewViewController~ipad用于 iPad 和NewViewController~iPhoneiphone .. 所以当您实现时,initWithNibName只需为您编写 xib 的基本名称,NewViewController即iOS 将根据当前使用的平台调用匹配 xib .. 并且不要忘记将新 xib 中的文件所有者的自定义类分配为您的新类,如下图所示。

在此处输入图像描述

对于创建新的 xib,检查这些图像:

在此处输入图像描述

在此处输入图像描述

于 2012-06-20T10:08:46.430 回答
0

Malek_Jundi 有一个关于如何为 iphone 和 ipad 创建和加载 .nib 文件的清晰指南。

如果要为每种情况(iphone 或 ipad)创建不同的类,可以使用 IF 语句,如下所示:

UIViewController *target;
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
    target = [[NewViewController alloc] initWithNibName:@"NewViewController" bundle:[NSBundle mainBundle]];
} else {
    target = [[NewViewController_ipad alloc] initWithNibName:@"NewViewController" bundle:[NSBundle mainBundle]];
}

但是我懒得在我的代码中重复输入“IF”语句来为iphone/ipad创建特定的类。我有另一种方法:

- (Class)idiomClassWithName:(NSString*)className
{
    Class ret;
    NSString *specificName = nil;
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
        specificName = [[NSString alloc] initWithFormat:@"%@_ipad", className];
    } else {
        specificName = [[NSString alloc] initWithFormat:@"%@_iphone", className];
    }
    ret = NSClassFromString(specificName);
    if (!ret) {
        ret = NSClassFromString(className);
    }
    return ret;
}

- (void)createSpecificNewController
{
    Class class = [self idiomClassWithName:@"NewViewController"];
    UIViewController *target = [[class alloc] initWithNibName:@"NewViewController" bundle:[NSBundle mainBundle]];
    //...
}
于 2014-02-12T03:23:40.250 回答