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