У меня есть приложение MVC с одной моделью и несколькими представлениями (что-то вроде скинов). Я хочу, чтобы пользователь мог переключать представления, и я не могу заставить его работать с ориентацией интерфейса. Самый простой подход выглядит так:
- (void) switchToADifferentView: (UIView*) newView {
// self is a descendant of UIViewController
self.view = newView;
}
Это не работает, потому что входящий вид не поворачивается в соответствии с текущей ориентацией (до следующего изменения ориентации, test случай). Есть ли способ принудительно настроить ориентацию вида? Похоже, система очень старается сохранить управление интерфейсом для себя. (Или это так же просто, как установить правильное преобразование вручную?)
Я решил, что лучше не переключать представления напрямую, а вместо этого переключать контроллеры. Это имеет смысл, так как упрощает исходный код. Но как переключать контроллеры, между которыми нет «навигационной связи»? Думаю, я мог бы использовать presentModalViewController:
, но это похоже на хак. То же самое касается навигационного контроллера. Если я поменяю контроллеры вручную, я снова получу неправильную ориентацию:
- (void) switchToAController: (id) incoming {
[currentController.view removeFromSuperview];
[window addSubview:incoming.view]; // does not respect current orientation
}
Теперь как, черт возьми, мне просто заменить текущий контроллер на другой? Опять же, контроллеры — это что-то вроде «скинов», работающих над общей моделью, поэтому на самом деле нет смысла притворяться, что скин A — это «модальный» диалог поверх скина B или что они являются частью стека навигации.