Будьте очень осторожны с вашими self.view=otherVC.view
подходами. UIViewController предназначен для управления одним представлением. Он не предназначен для замены своего вида (поэтому изменения ориентации не работают). Это имеет значение в таких случаях, как -didReceiveMemoryWarning
, если ваш ViewController не отображается на экране. Он тихо сбросит свой вид, и когда он вернется на экран, перезагрузите вид из NIB (или перезапустите -loadView
).
Ваш presentModalViewController:
подход несколько лучше, хотя он работает не так, как модальное представление. Это по крайней мере позволяет каждому ViewController управлять своим собственным представлением. Как правило, вы бы использовали UITabBarController или UINavigationController здесь. Я полагаю, у вас есть причина, по которой вы этого избегаете.
Мое рекомендуемое решение этого вопроса - добавить UIView в представление вашего основного контроллера (в виде IBOutlet или в коде). Вы поменяете , что просмотр, а не поменять местами представление UIViewController. Я бы, вероятно, пошел дальше и подкласс UIViewController для обработки этого с методами, смоделированными после UITabBarController.
@interface RNSwappableViewController : UIViewController
{
...
}
@property(nonatomic, assign) id<RNSwappableViewControllerDelegate> delegate;
@property(nonatomic) NSUInteger selectedIndex;
@property(nonatomic, assign) UIViewController *selectedViewController
@property(nonatomic, copy) NSArray *viewControllers;
@end
@protocol RNSwappableViewControllerDelegate : NSObject
- (void)swappableViewController:(RNSwappableViewController *)swappableViewController didSelectViewController:(UIViewController *)viewController
@end