Приложение iPhone, преобразованное в приложение для iPad, показывает iPhone xib, а не iPad xib

Я в процессе преобразования приложения для iPhone в универсальное приложение.

  • Я изменил все настройки xCode и добавил новый MainWindow-iPad.xib
  • Я подключил все ссылки на конструктор интерфейса (например, MainWindow-iPad к соответствующему классу ViewController iPad, окну и т. Д.)
  • # P2 #
    # P3 #
  • в делегате приложения я проверяю, на каком устройстве я работаю, и загружаю соответствующий класс:

    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {      
    // Override point for customization after application launch.
    navController = [[UINavigationController alloc] initWithRootViewController:viewControlleriPad];
    // Add the view controller's view to the window and display.
    [windowiPad addSubview:navController.view];
    [windowiPad makeKeyAndVisible];
    
    [navController setNavigationBarHidden:YES animated:NO];
    
    
    } else {
    //I am an iPhone! 
    
    // Override point for customization after application launch.
    navController = [[UINavigationController alloc] initWithRootViewController:viewController];
    // Add the view controller's view to the window and display.
    [window addSubview:navController.view];
    [window makeKeyAndVisible];
    
    [navController setNavigationBarHidden:YES animated:NO];
    }
    

И все, кажется, работает нормально, за исключением того, что он по-прежнему загружает файл пера iPhone / xib AppViewController.xib вместо AppViewControlleriPad.xib. Вы можете запросить дополнительную информацию, но я не могу понять, как заставить его загружать AppViewControlleriPad.xib при запуске iPad, а не iPhone / исходный файл xib.

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

Как я могу исправить это так, чтобы правильный xib загружался для правильного устройства?


person glenstorey    schedule 07.03.2012    source источник


Ответы (2)


У вас есть орфографическая ошибка - правильный суфикс для ресурсов iPad - «~ ipad» вместо «-iPad». С «~ ipad» ваши ресурсы будут загружаться автоматически в зависимости от устройства.

И вам, вероятно, не понадобится еще один UIWindow для контроллеров iPad. Вы можете использовать то же окно в начальной точке приложения. Хорошей практикой также является наличие одного контроллера представления (внутри вы можете выполнять некоторые специальные функции для разных устройств) и двух перьев (одно «нормальное», а второе с суфиксом «~ ipad»). В редких случаях, если поведение контроллера полностью отличается, вы можете использовать два контроллера представления.

person Artur Ozierański    schedule 07.03.2012
comment
Если вы создаете универсальное приложение с нуля, суффиксы на самом деле будут _iPhone и _iPad. - person Rok Jarc; 07.03.2012
comment
Да, но эти суффиксы в универсальном шаблоне приложения не являются истинными суффиксами - они используются только для ручного выбора правильного файла ресурсов по имени при инициализации контроллера представления в делегате приложения. Согласно документу developer.apple.com/ library / ios / # documentation / Cocoa / Conceptual / ~ ipad и ~ iphone суффиксы верны для автоматического распознавания, без проверки, если (UI_USER_INTERFACE_IDIOM () == UIUserInterfaceIdiomPad) - person Artur Ozierański; 07.03.2012
comment
Вау, спасибо за эту информацию. Я жил в заблуждении. +1 - person Rok Jarc; 07.03.2012
comment
И будьте осторожны с орфографией - суффиксы должны быть в нижнем регистре. Я делал такую ​​ошибку в прошлом - я добавил ~ iPad к имени файла с пером, и все было хорошо на симуляторе, но пути к устройствам чувствительны к регистру, и все было неправильно;) - person Artur Ozierański; 07.03.2012
comment
Хорошо знать. Итак, чтобы уточнить: переименуйте файл xib в AppViewController ~ ipad.xib и полностью удалите проверку идиомы, хотя я не начинаю с нуля, а конвертирую. Спасибо, что заметил два окна, я чувствовал, что это неправильно, но я пытался отладить. - person glenstorey; 07.03.2012

Это может быть связано с тем, что вы не подключили контроллер представления iPad к владельцу файлов в IB.

person KrishnaKumar    schedule 07.03.2012