Нажатие контроллера навигации не поддерживается - выполнение сегментов

Я создал новый контроллер навигации в своей раскадровке (не программно!) И установил его как «Root View Controller». к обычному контроллеру UIViewController и добавил в него кнопку, которая говорит - перейти к следующему контроллеру представления (этот второй контроллер представления является контроллером представления, который, я хочу, будет иметь кнопку возврата для связи с исходным контроллером представления). Теперь всякий раз, когда я пытаюсь связать кнопку с контроллером следующего представления, «Нажатие контроллера навигации не поддерживается».

Помогите мне, пожалуйста, и спасибо

РЕДАКТИРОВАТЬ: Я случайно подкласс UINavigationController, а не UIViewController в моем классе. В любом случае, спасибо.

Ответы на вопрос(4)

ать ему идентификатор, такой как «PushView», а затем назвать его следующим образом ....

[self performSegueWithIdentifier:@"PushView" sender:self];

Это программно сделает то же самое, что и нажатие на кнопку «вперед». Я создал вам пример проекта с кодом, описанным выше. Имеет - (IBAction) с кодом, который вы можете использовать для постепенного изменения представления.

PushView.zip

представить экран (на котором был встроенный контроллер навигации), когда пользователь нажимает кнопку.

При первой попытке я подключил переход с кнопки на первом экране к контроллеру навигации, и приложение зависало с этой ошибкой «Нажатие контроллера навигации не поддерживается».

Это решение, которое я нашел:

Выберите переход от кнопки на первом экране к контроллеру навигации. Если у него был идентификатор, скопируйте его имя. Затем удалите этот переход.

Затем создайте новый переход, нажав клавишу CTRL в первом контроллере представления и перетащив на значок КОНТРОЛЛЕР ПРОСМОТРА, КОТОРЫЙ ВЫ ХОТИТЕ ПРЕДСТАВИТЬ (не к Навигационному контроллеру, который указывает на него), и выберите Push в небольшом всплывающем окне.

Затем щелкните значок в середине перехода и вставьте имя, скопированное на первом шаге, в качестве идентификатора.

IB собирается предупредить вас: «Сцена недоступна из-за отсутствия точек входа и не имеет идентификатора для доступа во время выполнения через -instantiateViewControllerWithIdentifier :.» Не волнуйся, все работает отлично.

Если вы хотите настроить возвращаемую строку, которая отображается в виде кнопки «Назад», вы можете добавить эту строку в метод viewDidLoad КОНТРОЛЛЕРА ПРОСМОТРА, КОТОРОЕ ПОКАЗЫВАЕТСЯ ПОСЛЕ КНОПКИ НАЖМИТЕ, это дочерний контроллер вида.
(замените «Настройки» на нужное имя)

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.navigationController.navigationBar.topItem.title = @"Settings";
    ...

}

все это сделано в IB без дополнительного кода ...

Запустите новый проект «Single View Application», используя раскадровки Выберите раскадровку и удалите созданный вид. Перетащите на новый контроллер навигации (он принесет с собой табличное представление) Удалите таблицу и контроллер табличного представления, так что вы просто остались с навигационным контроллером Перетащите на контроллер обычного вида Право Нажмите и перетащите из контроллера навигации в новое представление и выберите «Связь - контроллер корневого представления» Перетащите «Элемент панели кнопок» на панель навигации, которая должна быть видна в верхней части вашего ViewController, вы можете переименовать этот Forward, если хотите. Теперь перетащите на другой контроллер представления, который будет нажимать ваша кнопка «Вперед» для просмотра. Право Нажмите и перетащите с кнопки панели на 2-й контроллер вида и выберите «Push»

Запустите проект, и вы получите Одиночный вид с навигационной панелью и кнопкой, нажав на кнопку, вы нажмете другой вид и вернете кнопку «Назад», чтобы вернуться к первому контроллеру вида. Я постараюсь опубликовать фотографию своего раскадровки, если это поможет.

Плазма

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

Используя другие подходы, я обнаружил, что UINavigationController будет сохранен из оригинальной раскадровки - чего я не хотел - или я получу ошибки.

Использование AppDelegate в вашем контроллере представления для установки rootViewController сработало для меня (заимствуя соглашения о присвоении имен от Перейти к другой раскадровке?):

- (void)showStartupNavigationController {
NSLog(@"-- Loading storyboard --");

//Get the storyboard from the main bundle.
UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"Startup" bundle:nil];
//The navigation controller, not the view controller, is marked as the initial scene.
UINavigationController *theInitialViewController = [storyBoard instantiateInitialViewController];

NSLog(@"-- Loading storyboard -- Nav controller: %@", theInitialViewController);

//Remove the current navigation controller.
[self.navigationController.view removeFromSuperview];
UIWindow *window = [(AppDelegate *)[[UIApplication sharedApplication] delegate] window];
window.rootViewController = theInitialViewController;

ВАШ ОТВЕТ НА ВОПРОС