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

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

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

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

 Omar Abdelhafith30 мая 2012 г., 15:40
пожалуйста, проверьте следующее Github.com / cruffenach / Mobile-Татс-Plus-UIStoryboard
 woz30 мая 2012 г., 16:39
Так ты изменилсяRootiViewController бытьUIViewController?
 ngoa15 мар. 2013 г., 20:21
Спасибо за обновление!!
 Lior Pollak30 мая 2012 г., 15:45
короче, пожалуйста?

Ответы на вопрос(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»

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

Плазма

 Lior Pollak30 мая 2012 г., 18:59
BTW - ваш путь выдает мне эту ошибку: TwentyOneQuestions [37746: 1bb03] *** Завершение приложения из-за необработанного исключения «NSInvalidArgumentException», причина: «Выдвижение контроллера навигации не поддерживается» *** Стек первого вызова вызова: (0x132f022 0x26e6cd6 0x38cf1b 0xb36452d 0x38ca24 0x6e8de6 0x6dd4d0 0x1330e99 0x2b514e 0x4f3a0e 0x1330e99 0x2b514e 0x2b50e6 0x35bade 0x35bfa7 0x35b266 0x2da3c0 0x2da5e6 0x2c0dc4 0x2b4634 0x18e9ef5 0x1303195 0x1267ff2 0x12668da 0x1265d84 0x1265c9b 0x18e87d8 0x18e888a 0x2b2626 0x296d 0x28d5) Terminate называется бросать исключение (lldb)
 Plasma30 мая 2012 г., 22:41
Я могу только думать, что ты, возможно, сделал что-то не так? Вы выбрали обычный "контроллер вида" для последних 2 видов, а не контроллер навигации. до точки y o щелчок правой кнопкой мыши и перетаскивание представлений должны представлять собой простые белые квадраты, на которых нет ничего, кроме строки состояния. Синяя панель навигации размещается автоматически после подключения ящиков.
 Plasma31 мая 2012 г., 16:11
Интересно, ты скачал мой пример проекта в посте ниже и попробовал это?
 Lior Pollak30 мая 2012 г., 18:50
Благодарность! еще одна (крошечная) очередь, могу ли я сделать этот «толчок» программно? Я имею в виду, я хочу сделать заявление if, например, только если приложение было авторизовано в Game Center. Как мне это сделать
 Lior Pollak31 мая 2012 г., 14:24
Выбран контроллер простого вида, но выдает ошибку.

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

Используя другие подходы, я обнаружил, что 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;
 Fattie30 мая 2014 г., 16:38
Я могу помочь тебе с этим. Рассмотреть возможность Stackoverflow.com / а / 23403979/294884 а также Stackoverflow.com / а / 23060746/294884 (всегда трудно понять, «в чем заключается проблема / решение» с фрикционными «раскадровками-контроллерами-контейнерами-контейнерам

Ваш ответ на вопрос