2014-02-18 5 views
2

Я использую tabBarController с несколькими UINavigationControllers в моем приложении iPhone, и теперь хочу добавить поддержку для вращения (на некоторых контроллерах представления, а не на всех). Я знаю, что мне нужно реализовать метод supportedInterfaceOrientation для моих UIViewControllers.UINavigationController supportedInterfaceOrientations: category vs swizzle

Когда устройство повернуто, поддерживаемая информация об интерфейсе вызывается в UINavigationController, но мне нужно, чтобы он вызывался на моем viewControllers. Каков наилучший способ сделать это?

  • Я видел, что некоторые люди создают категорию на UINavigationController, который переопределяет supportedInterfaceOrientation для запроса дочерних viewControllers. Но я знаю, что Apple хмурится тем, что использует Категории для переопределения методов. (Я реализовал его так, и он отлично работает, но я хочу, чтобы приложение продолжало работать с будущей версией iOS.)

  • Как насчет использования метода swizzling?

  • Подкласс UINavigationController?

Любые предложения оценены. :)

ответ

2

Если вы используете IOS 6+ Я хотел бы предложить подклассы UINavigationController и первостепенной supportedInterfaceOrientations

что-то похожее на:

- (NSUInteger)supportedInterfaceOrientations; 
{ 
    return [self.topViewController supportedInterfaceOrientations]; 
} 
2

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

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(screenOrientationChanged) name:UIApplicationDidChangeStatusBarOrientationNotification object:nil]; 
+0

Несмотря на то, что это даст вам уведомление при изменении ориентации, что он не будет делать это ограничивают вращение устройства в определенные направления, который является то, что ОП попросил о. –

+0

Вы правы. Но мой вариант более гибкий, поэтому он также может быть полезен для автора. Также для подкласса UINavigationController потребуется больше кода для записи, а затем подписки и обработки уведомления. – Avt