iOS — нажмите viewController из кода и раскадровки

у меня есть этот код

 PlaceViewController *newView = [self.storyboard instantiateViewControllerWithIdentifier:@"PlaceView"];
 [self presentViewController:newView animated:YES completion:nil];

И я могу изменить представление, но я бы нажал это представление, потому что когда я возвращаюсь на эту страницу, состояние сохраняется.

Я пытаюсь поставить этот код:

[self.navigationController pushViewController:newView animated:YES];

но ничего не делает.

Спасибо


person Xose    schedule 21.12.2012    source источник


Ответы (5)


Цель-C:

PlaceViewController *newView = [self.storyboard instantiateViewControllerWithIdentifier:@"storyBoardIdentifier"];
[self.navigationController pushViewController:newView animated:YES];

Пожалуйста, обратите внимание на пункты ниже,

  1. ваш идентификатор раскадровки правильный.

  2. В корневом представлении есть контроллер навигации.

Свифт:

let newView = self.storyboard?.instantiateViewController(withIdentifier: "storyBoardIdentifier") as! PlaceViewController
self.navigationController?.pushViewController(newView, animated: true)
person Vineesh TP    schedule 28.05.2014
comment
привет, здесь, в целевом контроллере просмотра, не получается навигация - person Jignesh B; 08.04.2015
comment
@JigneshB: Вы подключаетесь к навигационному контроллеру? проверьте 2-й пункт, 2. В корневом представлении есть контроллер навигации. - person Vineesh TP; 09.04.2015

Для раскадровок вы должны использовать performSegueWithIdentifier следующим образом:

 [self performSegueWithIdentifier:@"identifier goes here" sender:self];
person Sumanth    schedule 21.12.2012
comment
Где? (Извините, что не знал) - person Xose; 21.12.2012
comment
Вместо [self.navigationController pushViewController:newView animated:YES]; вы должны использовать [self performSegueWithIdentifer:@"You identifier" sender:self]; - person Sumanth; 21.12.2012
comment
Ни один видимый @interface не объявляет селектор «performSegueWithIdentifer: отправитель». У меня есть эта ошибка. - person Xose; 21.12.2012
comment
PerformSegueWithIdentifier — это метод класса UIViewController. Если ваш ModelController не является подклассом UIViewController, метод будет недоступен. Без полного понимания вашего приложения невозможно быть уверенным - person Sumanth; 21.12.2012
comment
я предлагаю вам прочитать raywenderlich.com/5138/beginning -storyboards-in-ios-5-part-1 это руководство - person Sumanth; 21.12.2012
comment
Я вызываю этот код из этого класса: @interface MapViewController : UIViewController {...} Итак, этот класс является подклассом UIViewController, верно? - person Xose; 21.12.2012

Использовать:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"STORYBOARD_NAME" bundle:nil];
PlaceViewController *newView = [storyboard instantiateViewControllerWithIdentifier:@"PlaceView"];
[self presentViewController:newView animated:YES completion:nil];

Or:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"STORYBOARD_NAME" bundle:nil];
PlaceViewController *newView = [storyboard instantiateViewControllerWithIdentifier:@"PlaceView"];
[self.navigationController pushViewController:newView animated:YES];
person Alino    schedule 07.07.2017

Swift 3.x

let viewController = storyboard?.instantiateViewController(withIdentifier: "storyboardIdentifier") as! UIViewController
navigationController?.pushViewController(viewController, animated: true)
person footyapps27    schedule 24.02.2017

По умолчанию Xcode создает стандартный контроллер представления. сначала мы меняем контроллер представления на контроллер навигации. Выберите «Просто выберите «Редактор» в меню и выберите «Встроить», а затем «Контроллер навигации». Шаг 1. Выберите основную доску раскадровки. Шаг 2. Нажмите «Редактор» в верхней части приложения Xcode. Шаг 3. Нажмите «Встроить в»

Xcode автоматически встраивает контроллер представления с контроллером навигации.

person Shashikant Kashodhan    schedule 08.03.2016