Селективный авторотации в UINavigationController


В текущем проекте мне нужно, чтобы включить/отключить автоповорот интерфейса для конкретного наследник UIView по. Я посмотрел вокруг и не нашел рабочего раствора, который соответствовал моему делу и возвращение не в

shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

метод не работает, как кажется, чтобы получить переопределяется значение, возвращенное ему UIView, в котором UINavigationController проживает в.

Так что теперь я слежу за которое в настоящее время смотреть загоняется в стек с помощью метода делегата:

- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated

а затем проверить, если текущий вид моего "не повернуть" в

shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

и возврата нет, если это так, то прекрасно работает.

В моем коде это выглядит так:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Return YES for supported orientations
    if (currentView == [DimensionConversionViewController class]) {
        return NO;
    }
    return YES;
}

- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
    currentView = [viewController class];
}

Это больше похоже на хак для меня. Кто-нибудь сталкивался с той же проблемой и решить ее в другую/более элегантный способ? Как указано выше, это, кажется, единственный способ добиться этого.



2871
1
задан 12 декабря 2011 в 06:12 Источник Поделиться
Комментарии
1 ответ

В первую очередь можно пропустить хранение текущего контроллера представления в переменную. И вместо того, чтобы проверить правильность класса вы могли бы делегировать свои shouldAutorotateToInterfaceOrientation: на текущей видимой в навигационный контроллер.

- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
// assumes you've got access to the navigation controller here
UIViewController *visibleController = navigationController.visibleViewController;

return [visibleController shouldAutorotateToInterfaceOrientation:interfaceOrientation];
}

3
ответ дан 1 февраля 2012 в 02:02 Источник Поделиться