Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

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

  • Запустите новый проект "Приложение с одним представлением", используя панели рассказов.
  • Выберите раскадровку и удалите созданные ее виды.
  • Перетащите новый контроллер навигации (он приведет к просмотру таблицы)
  • Удалите таблицу и контроллер табличного представления, поэтому вы просто остаетесь с контроллером навигации
  • Перетащите регулятор нормального представления.
  • Щелкните правой кнопкой мыши и перетащите из навигационного контроллера в новый вид и выберите "Связь - контроллер корневого представления"
  • Перетащите элемент "Панель кнопок" на навигационную панель, которая должна быть видна в верхней части вашего ViewController, вы можете переименовать эту Forward, если хотите.
  • Теперь перетащите другой контроллер вида, который будет отображаться в вашей кнопке "Вперед".
  • Щелкните правой кнопкой мыши и перетащите его с панели на второй контроллер просмотра и выберите "Push"

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

PushViewControllers

Плазма

Ответ 2

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

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

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

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

Ответ 3

Чтобы подменять представления Программно, вам нужно будет выбрать segue и дать ему идентификатор типа PushView, а затем вызвать его так.

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

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

PushView.zip

Ответ 4

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

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

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

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

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

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

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

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

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

}