2013-06-02 4 views
1

У меня есть приложение, где мой основной вид встроен в контроллер навигации. Оттуда кнопки нажимают на другие контроллеры. Все это прекрасно работает. Тем не менее, один из контроллеров представлений, который он подталкивает, обновляет одно из значений корня и представляет его снова. Однако на этот раз он представляет только ViewController без контроллера навигации, и, конечно, нажатие кнопки для возврата закончится сбоем. Надеюсь, эта картина поможет понять мою проблему. Нажатие кнопки ввода на самом деле не имеет большого значения, я просто вызываю эту функцию при возврате клавиатуры.Загрузить изображение с помощью навигационного контроллера?

код, чтобы вернуться к основному контроллеру:

-(void)createNewMain:(NSString*)newAddress { 
    ViewController* newController = [self.storyboard instantiateViewControllerWithIdentifier:@"MainView"]; 
    newController.labelText = newAddress; 
    newController.connected = self.connected; 
    [self presentViewController:newController animated:YES completion:nil]; 
} 

enter image description here

+0

Вы действительно хотите просто вытащить ConnectionViewController из стека навигации? –

ответ

3

Проблема проста, вы представляя инстанцированный контроллер представления модально.

Заменить

[self presentViewController:newController animated:YES completion:nil]; 

с

[self.navigationController pushViewController:newController animated:yes]; 

Кроме того, вы можете сделать переход, чтобы сделать это из раскадровки. Когда выполняется segue, он создаст новый экземпляр и не будет использовать ранее созданный.

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

+0

Спасибо! У меня есть только одна строка, которая передается обратно в корневой каталог, поэтому я пока не хочу вникать в делегатов. Однако, в раскадровке, если я создаю push-сег из представления в корень, не помешает ли он существующему из корневого контроллера представлению? – Carpetfizz

+0

Нет. Если мы сделаем новый переход от второго контроллера представления к контроллеру корневого представления, будет создан новый экземпляр. –

1

Вы действительно не хотите, чтобы «вернуться» в новый экземпляр корневого контроллера. Что вам нужно сделать, чтобы правильно вернуться в корневом контроллер должен совать все другие одни из стека навигационного контроллера как это:

[self.navigationController popToRootViewControllerAnimated:YES];

1

Использования делегации передать ожидаемое/требуемое сообщение, которое вы хотите от вашего Pi Контроллер в Root View Controller и настройте его в соответствии с сообщением. Там нет необходимости создавать новый экземпляр вашего Root View Controller. Вы всегда можете вернуться к контроллеру представления корня из любого места в навигации стека, используя

[[self navigationController] popToRootViewControllerAnimated:YES]; 
Смежные вопросы