removefromsuperview и addubview не меняют отображение

Я довольно новичок в разработке iOS, и я пытаюсь разработать простое приложение, в котором кнопка изменяет subviews. У меня есть базовый RootViewController , который корректно отображает MiddleView в init . MiddleView имеет единственную кнопку, обозначенную «First», которая подключена (в Interface Builder) к RootViewController 's -openFirstView .

Вот как отображается RootViewController в RootViewController 's -viewDidLoad

 MiddleViewController *middleTemp = [[MiddleViewController alloc] initWithNibName:@"MiddleView" bundle:nil]; self.middle = middleTemp; self.middle.rootViewController = self; [self.view addSubview:middle.view]; [middleTemp release]; 

Таким образом, у меня есть следующие ViewControllers s: MiddleViewController и FirstController которые управляют MiddleView и FirstView соответственно, и RootViewController который переключается между ними.

Я связал это, поставив ссылку MiddleViewController в MiddleViewController и добавив

 self.middle.rootViewController = self; 

для RootViewController 's -viewDidLoad .

 -(IBAction)openFirstView:(id)sender{ [middle.view removeFromSuperview]; [self.view addSubview:firstController.view]; } 

Примечание. Я попытался инициализировать firstController внутри -openFirstView , и когда он изначально не выполнялся, я переместил инициализацию в -viewDidLoad и доказал, что он инициализируется из nib правильно, отображая FirstView непосредственно в -viewDidLoad

Где firstController загружается в ссылку ранее в коде. Однако, когда я запускаю код и нажимаю кнопку, ничего в представлении не меняется.

Я еще немного диагностировал. Я обнаружил, что -ViewDidLoad в rootViewController вызывается дважды, один раз на первоначальной загрузке и один раз при первом нажатии кнопки, и я точно не знаю, почему именно.

Кажется, вы не инициализировали свой первый вид в приведенном ниже методе

 -(IBAction)openFirstView:(id)sender{ [middle.view removeFromSuperview]; //First initialize the firstController [self.view addSubview:firstController.view]; }