Невозможно отобразить другие представления в iOS - PullRequest
0 голосов
/ 15 марта 2012

Я новичок в части пользовательского интерфейса разработки 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 или раскадровки это необходимо удалить. Я его убрал и все работает! :)

1 Ответ

0 голосов
/ 17 августа 2012

Я понял проблему.Происходит следующее: когда ViewController создается без xib-файла, метод loadView добавляется в новый ViewController.Насколько я понимаю, этот метод используется, когда представления создаются программно / вручную.При использовании файлов XIB или раскадровки это необходимо удалить.Я его убрал и все работает!:)

...