Контейнерные контроллеры в сравнении с отдельными пользовательскими контроллерами в приложении iPad - PullRequest
0 голосов
/ 15 апреля 2011

Я конвертирую существующее приложение для iPhone в приложение для iPad.Приложение для iPhone было создано с использованием контейнера viewcontroller (UINavigationController), который сначала предоставил пользователю пользовательский viewcontroller (UITableViewController), который выдвигал пользовательский viewcontroller (UIViewController) на основе выбора строки.

В приложении iPad япредставление пользователя напрямую с пользовательским UIViewController (без контроллера контейнера) и затем возможность выбора различных параметров с помощью UIPopoverController.В myAppDelegate.m я просто добавляю пользовательский UIViewController в окно, используя:

[window addSubview:[myCustomViewController view]];

В myCustomViewController.m я сильно изменяю представление, основываясь на повороте устройства, регистрируясь для уведомлений об изменении ориентации в viewWillAppear:

-(void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(didRotate:)                                                  name:@"UIDeviceOrientationDidChangeNotification" object:nil];
}

Затем я проверяю ориентацию в методе didRotate: и получаю очень странные результаты.Это вызывается три раза, просто загружая представление?Также кажется, что он сообщает об ориентации, соответствующей ПРЕДЫДУЩЕМУ чертежу вида?

- (void) didRotate:(NSNotification *)notification
{   
    if (self.interfaceOrientation == UIInterfaceOrientationPortrait) {
        NSLog(@"Portrait");
    } else if (self.interfaceOrientation == UIInterfaceOrientationLandscapeLeft || self.interfaceOrientation == UIInterfaceOrientationLandscapeRight) {
        NSLog(@"Landscape");
    }
}

Я читал в документации, и кажется, что добавление подпредставления к окну (без класса контейнера) не будетвызывать viewWillAppear: метод для вызова, но в моем случае кажется, что он вызывается, просто ненадежно.

Есть ли какой-то другой шаблон, который я должен использовать для этого приложения?Я просто хочу загрузить одно пользовательское представление и использовать два поповерных контроллера (без другой навигации)?

-Derrick

btw - Это работает точно так же, как если бы я помещал пользовательский viewController наUINavigationController в моем приложении делегат.Мне просто не нужен навигационный контроллер для этого приложения.

1 Ответ

0 голосов
/ 16 апреля 2011

В моем приложении, над которым я работаю, у меня сначала есть свойство, чтобы выяснить, является ли устройство iPad:

- (BOOL)iPad {

    return UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ? YES : NO;
}

А затем вы можете использовать следующий метод делегирования вашего представления.

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {

if (self.iPad) {
    if (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft || 
        toInterfaceOrientation == UIInterfaceOrientationLandscapeRight) {
    //do some stuff 
    }   

}

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...