Я новичок в части пользовательского интерфейса разработки iOS. Я пытаюсь создать универсальное приложение для iOS. В Xcode 4.3, если проект создается с использованием шаблона приложения Single View и семейства универсальных устройств, создаются следующие файлы: AppDelegate, ViewController, ViewController_iPhone.xib и ViewController_iPad.xib. Это сбивает меня с толку, потому что в предыдущих версиях Xcode также создавались два подкласса AppDelegate; Один для iPhone, а другой для iPad. В любом случае, например, у меня есть TestAppDelegate, TestViewController, TestViewController_iPhone.xib и TestViewController_iPad.xib. Если я запустил приложение на симуляторе iPad, отобразится TestViewController_iPad.xib.
Затем я добавил AlternateViewController. После этого я создал AlternateViewController_iPad.xib. Я выбрал этот xib-файл и установил для пользовательского класса владельца файла значение AlternateViewController и установил для вида Outlet представление в разделе «Объекты». Я хотел посмотреть, смогу ли я отобразить AlternateViewController_iPad, поэтому в TestAppDelegate я сделал это:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
// Override point for customization after application launch.
if(NO){
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
self.viewController = [[[TestViewController alloc] initWithNibName:@"TestViewController_iPhone" bundle:nil] autorelease];
} else {
self.viewController = [[[TestViewController alloc] initWithNibName:@"TestViewController_iPad" bundle:nil] autorelease];
}
self.window.rootViewController = self.viewController;
}
else{
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
self.alternateScreenController = [[[AlternateViewController alloc] initWithNibName:@"AlternateViewController_iPhone" bundle:nil] autorelease];
} else {
self.alternateScreenController = [[[AlternateViewController alloc] initWithNibName:@"AlternateViewController_iPad" bundle:nil] autorelease];
}
self.window.rootViewController = self.alternateScreenController;
}
[self.window makeKeyAndVisible];
return YES;
}
Я запускаю код, но, к сожалению, AlternateViewController_iPad.xib не отображается.
Я ставлю точку останова на «возврат ДА»; и в области отладки я вижу, что переменная self.window.rootViewController.nibBundle установлена в nil . Однако если используется TestViewController_iPad, переменная self.window.rootViewController.nibBundle равна , а не nil .
Я удалил AlternateViewController и AlternateViewController_iPad.xib. Затем я создал их заново, но теперь, во всплывающем окне «Выбор параметров для нового файла:», я сбросил класс на AlternateViewController, «Подкласс» на UIViewController и проверил «предназначенный для iPad» и «С XIB для пользователя». интерфейс." Измените TestAppDelegate для этих новых файлов, а затем повторно запустите приложение. Любопытно, что теперь отображается AlternateViewController (iPad), а переменная self.window.rootViewController.nibBundle равна , а не nil .
Теперь, что мне здесь не хватает? Где ошибка? Это с моим кодом или с Xcode 4.3 ???
Дополнительный вопрос:
Если сначала отображается TestViewController_iPad и там есть кнопка, которая при нажатии отображает AlternateViewController_iPad, как мне это точно сделать?
UPDATE
Я понял проблему. Происходит следующее: когда ViewController создается без файла xib, метод loadView добавляется в новый ViewController. Насколько я понимаю, этот метод используется, когда представления создаются программно / вручную. При использовании файлов XIB или раскадровки это необходимо удалить. Я его убрал и все работает! :)