как проверить устройство 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 ответа:
Как я вижу в коде, который вы используете
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];