как проверить устройство ipad или iphone в appdelegate для xib?


Вот мой didFinishLaunchingWithOptions:
В настоящее время мое приложение предназначено только для iPhone, но я хочу, чтобы это было в обоих(универсальных).

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    playerScreenViewController *playerScreen=[[playerScreenViewController alloc] initWithNibName:@"playerScreenViewController" bundle:nil];
    UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:playerScreen];
    self.window.rootViewController = navigationController;
    [[UIApplication sharedApplication] setStatusBarHidden:YES];
    self.window.backgroundColor = [UIColor grayColor];
    [self.window makeKeyAndVisible];
    return YES;
}

И я не знаю, как использовать это условие в appdelegate:

if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad) {
    // iPad
} else {
    // iPhone
}
3 3

3 ответа:

Как я вижу в коде, который вы используете Xib для playerScreenViewController. Теперь вам нужно создать Xib для iPad окружение.

И поместите свой код следующим образом:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

        playerScreenViewController *playerScreen;
        if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad) {
            // iPad
            playerScreen=[[playerScreenViewController alloc] initWithNibName:@"playerScreenViewController_iPad" bundle:nil];

        } else {
            // iPhone
            playerScreen=[[playerScreenViewController alloc] initWithNibName:@"playerScreenViewController" bundle:nil];

        }

        UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:playerScreen];
        self.window.rootViewController = navigationController;
        [[UIApplication sharedApplication] setStatusBarHidden:YES];
        self.window.backgroundColor = [UIColor grayColor];
        [self.window makeKeyAndVisible];
        return YES;
    }

Обратите внимание на эту линию

playerScreen=[[playerScreenViewController alloc] initWithNibName:@"playerScreenViewController_iPad" bundle:nil];

Здесь вы должны передать Xib имя для среды iPad.

Простое решение моего вопроса.
Поместите эти два метода в вспомогательный класс Здесь я использую " CommonUtils".

+(BOOL)isiPad
{
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
    {
        return YES;
    }
    else
    {
        return NO;
    }
}

+(NSString *)loadXIBBasedOnDevice:(NSString *)viewControllerName
{
    NSString *strReturn = @"";
    if([CommonUtils isiPad])
    {
        strReturn = [NSString stringWithFormat:@"%@-iPad",viewControllerName];
    }
    else
    {
        strReturn = viewControllerName;
    }
    NSLog(@"%@",strReturn);
    return strReturn;
}  

И поставьте это на методViewcontroller , хотите ли вы проверить.:

ViewController *viewController = [[ViewController alloc] initWithNibName:[CommonUtils loadXIBBasedOnDevice:@"ViewController"] bundle:nil];
ViewController.navigationController.navigationBarHidden=NO;
[self.navigationController pushViewController:viewController animated:YES];

Также можно загрузить файл xib, не проверяя условие if для устройства.

Apple уже предоставляет эту функциональность. Вы должны просто дать имя файла xib в этом формате.

playerScreenViewController~iphone.xib // iPhone
playerScreenViewController~ipad.xib // iPad

И это утверждение автоматически принимает правильный xib на основе вашего устройства:

    playerScreenViewController *playerScreen=[[playerScreenViewController alloc] initWithNibName:@"playerScreenViewController" bundle:nil];