Универсальное приложение для iPad, не загружающее файлы iPad .xib? - PullRequest
6 голосов
/ 18 марта 2012

Я пытался выяснить, почему это происходит, но похоже, что в версии iPad для моего универсального приложения загружается iPhone .xib вместо iPad.

У меня естьназвал мои iPhone Xibs суффиксом ~ iphone.xib, и я оставил свои iPad только с .xib.Я читаю, чтобы сделать это, потому что кто-то сказал, что это работает для них, но в моем случае это не работает для меня!все еще загружает версию iPhone!

** Есть ли способ полностью подтвердить, что он загружает версию для iPhone вместо версии для iPad?

И есть ли способ исправитьэта проблема, чтобы iPad загружал iPad .xibs? **

Спасибо!

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  

    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];

// Override point for customization after application launch.
    self.viewController = [[[MyViewController alloc] initWithNibName:@"MyViewController" bundle:[NSBundle mainBundle]] autorelease];
    self.window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible];
    return YES;
}

Ответы [ 2 ]

4 голосов
/ 18 марта 2012

В моем приложении я делаю это так.Я создаю отдельные файлы .h, .m и XIB для представлений iPad, а затем в AppDelegate просто задаю условие if, которое решает, какой контроллер представления будет отображаться.
Кстати.Я не использую эти суффиксы на XIB, я называю их так, как хочу.

Мой файл AppDelegate.h (его часть)

 @class FirstViewController;
 @class FirstIpadViewController;    
 .......
 .......
 @property (nonatomic, retain) IBOutlet FirstViewController *viewController;
 @property (nonatomic, retain) IBOutlet FirstIpadViewController *ipadViewController;

Мой файл AppDelegate.m (его часть)

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
    self.window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible];
} else {
    self.window.rootViewController = self.ipadViewController;
    [self.window makeKeyAndVisible];
}

Это определенно должноЭто.Просто измените класс и свойство в файле .h на ваш контроллер представления, и вы должны быть в порядке:)

РЕДАКТИРОВАТЬ

Я только что узнал, каксделать это.А правильные соглашения об именах - это _iPhone и iPad.Это в основном то же самое, что я опубликовал выше, единственное изменение состоит в том, что он будет иметь те же файлы .h и .m, но разные XIB.

В файле AppDelegate .m

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
        self.viewController = [[ViewController alloc] initWithNibName:@"ViewController_iPhone" bundle:nil];
    } else {
        self.viewController = [[ViewController alloc] initWithNibName:@"ViewController_iPad" bundle:nil];
    }
    self.window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible];
    return YES;
}
0 голосов
/ 25 января 2014

Это решение работает с раскадровками, используя собственные пользовательские xibs.Он использует те же файлы .h & .m для представлений:

  • ViewController.h
  • ViewController.m
  • ViewController.xib
  • ViewController ~ iPad.xib

В свой файл ViewController.m добавьте:

- (id)initWithCoder:(NSCoder *)aDecoder
    {
        if (self)
        {
            NSString* nibName = NSStringFromClass([self class]);
            if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone)
            {
                self = [super initWithNibName:nibName bundle:nil];
            }
            else if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad)
            {
                self = [super initWithNibName:[nibName stringByAppendingString:@"~iPad"] bundle:nil];
            }
            return self;
        }
        return self;
    }

Просто проверьте, что у Xib-файлов установлено имя пользовательского класса контроллера вида владельца файла и установлен выход розетки.,

...