2012-05-30 4 views
14

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

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

EDIT: Я случайно подклассы UINavigationController, а не UIViewController в моем классе. Спасибо, в любом случае.

+0

пожалуйста, проверьте следующее https://github.com/cruffenach/Mobile-Tuts-Plus-UIStoryboard –

+0

короче, пожалуйста? –

+0

Итак, вы изменили 'RootiViewController' как' UIViewController'? – woz

ответ

10

Я попытался это и не имеют никаких проблем, его все сделано в IB без дополнительного кода, необходимого ...

  1. начать новый проект, «Single View Application», используя сюжетные доски
  2. Select раскадровки и удалить сделанные представления.
  3. Перетащите на новый Навигационный контроллер (это принесет вид таблицы с ней)
  4. Удалить таблицу и контроллер представления таблицы, так что вы только что вышли с
  5. Drag Navigation Controller на обычном контроллере представления
  6. Щелкните правой кнопкой мыши и перетащите из навигационного контроллера в новый вид и выберите «Связь - контроллер корневого представления».
  7. Перетащите элемент «Панель инструментов» на панель навигации, которая должна быть видна в верхней части вашего ViewController, вы можете переименуйте это вперед, если хотите.
  8. Теперь перетащите на другой контроллер вида, который является тем, который ваша кнопка «Вперед» будет нажата для просмотра.
  9. Щелкните правой кнопкой мыши и перетащите кнопку бара на 2-й View Controller, и выберите «PUSH»

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

PushViewControllers

Плазменный

+0

Спасибо! другая (крошечная) очередь - я могу сделать это «push» программно? Я хочу сказать, что я хочу сделать заявление if, например, только если приложение было разрешено игровому центру. Как я могу это сделать? –

+0

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) –

+0

я могу думать только вы, возможно, сделал что-то не так? Вы выбрали простой «контроллер просмотра» для последних двух видов, а не навигационный контроллер. до yhr point o правый щелчок и перетаскивание представлений должны быть равными белыми квадратами, в которых нет ничего, кроме строки состояния. Синяя панель навигации устанавливается автоматически после подключения ящиков. – Plasma

0

поменять взгляды Programatically вам нужно будет выбрать SEGUE и дать ему идентификатор, как "PushView", то называть это так ....

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

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

PushView.zip

1

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

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

Использование AppDelegate в контроллере представления, чтобы установить RootViewController работал для меня (заимствование переход именовании от Segue to another storyboard?):

- (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; 
+0

Я могу помочь вам с этим. Рассмотрите http://stackoverflow.com/a/23403979/294884 и http://stackoverflow.com/a/23060746/294884 (всегда трудно понять, «какова проблема/решение» с фрейм-раскадрой-viewcontrollers- контейнеры! Если это не относится к вашим потребностям здесь, никакого вреда не было.) – Fattie

0

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

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

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

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

Затем создайте новый SEGUE по CTRL-нажав на кнопку в первом контроллере представления и перетащив к VIEW CONTROLLER вы хотите представить (не Навигационный контроллер, который, указывая на него), и выберите толчок в небольшое всплывающее окно.

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

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

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

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

} 
Смежные вопросы