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

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

В моем MainStoryBoard я хочу нажать viewController на detailView, но я получаю эту ошибку:

NSInvalidArgumentException ', причина: "Нажатие контроллера навигации не поддерживается"

Я установил идентификатор идентификатора JSA для viewController на раскадровке.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (indexPath.row == 0) {
        SWSJSAViewController *viewController = [[UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil] instantiateViewControllerWithIdentifier:@"JSA"];
        [self.navigationController pushViewController:viewController animated:YES];
    }
}
4b9b3361

Ответ 1

Как rmaddy, в комментариях вы пытаетесь нажать навигационный контроллер.

Навигационные контроллеры должны быть представлены (через presentViewController или они могут быть добавлены как childViewController) и ViewControllers должны быть нажаты.

Ответ 2

Когда вы говорите о подталкивании навигации контроллера, то, скорее всего, что вы хотите, чтобы представить его.

  1. Представление UINavigationController

Это наиболее распространенный способ, и это то, что вы хотите сделать в большинстве случаев. UINavigationController не может быть передан, он может быть представлен только с новым корневым View Controller.

MyViewController* vc = [[MyViewController alloc]
      initWithNibName:@"MyController" bundle:nil];

UINavigationController *myNav = [[UINavigationController alloc] initWithRootViewController: vc];

[self presentViewController:myNav animated:YES completion:nil];

Здесь вы сначала создаете UINavigationController а затем устанавливаете необходимый UIViewController качестве своего корневого контроллера.


  1. Pushing UINavigationController

Если у вас есть иерархия ViewControllers и вам нужно нажать контроллер представления, который содержит контроллер навигации внутри, выполните следующие шаги:

1) Нажмите ViewController, содержащий UINavigationController.

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

ContainerViewController* vc = [[ContainerViewController alloc] init];

2) Добавление UINavigationController в качестве дочернего контроллера представления

В viewDidLoad вашего контейнера (который вы только что создали) просто добавьте что-то вроде этого:

Objective-C

UINavigationController* myNav = [[UINavigationController alloc] initWithRootViewController: rootViewController];
[myNav willMoveToParentViewController:self];

myNav.view.frame = self.view.frame;  //Set a frame or constraints
[self.view addSubview:myNav.view];
[self addChildViewController: myNav];
[myNav didMoveToParentViewController:self];

Свифт 4. 2+

let childNavigation = UINavigationController(rootViewController: viewController)
childNavigation.willMove(toParent: self)
addChild(childNavigation)
childNavigation.view.frame = view.frame
view.addSubview(childNavigation.view)
childNavigation.didMove(toParent: self)

То, что вы делаете здесь, - это в основном создание экземпляра вашего контроллера навигации и добавление его в качестве дочернего контроллера в вашу оболочку. Это. Вы успешно выдвинули свой UINavigationController.