вызов UINavigationController из MapViewController

У меня есть MapViewController, UINavigatioController, который инкапсулирует UITableViewController, который переходит в UIViewController, и все это помещено в раскадровку. на карте у меня есть кнопка, при нажатии на которую я хочу вызвать UITableViewController и иметь возможность открывать UIViewController.

если я позвоню

[self presentViewController:self.tableViewController animated:NO completion:nil];

отображается TableViewController, но при нажатии на индикатор раскрытия возникает исключение:

"Не удалось найти контроллер навигации для перехода 'showApartmentDetails'. Переходы push можно использовать только в том случае, если исходный контроллер управляется экземпляром UINavigationController."

Создание свойства типа UINavigationController и его инициализация с помощью

self.navigationController = (UINavigationController*)[self.storyboard instantiateViewControllerWithIdentifier:@"myNavigationController"];
[self.navigationController pushViewController:self.tableViewController animated:NO];

ничего не делает!

подскажите пожалуйста как вызвать навигатор?


person liv a    schedule 05.06.2013    source источник


Ответы (1)


Проблема в том, что

[self presentViewController:self.tableViewController animated:NO completion:nil];

Вам нужно представить UINavigationController, который обрабатывает tableViewController. Итак, вам нужно связать этот UINavigationController из раскадровки с выходом под названием UINavigationController *tableViewNavigationController в MapViewController.

[self presentViewController:self.tableViewNavigationController animated:NO completion:nil];

или просто добавьте модальный переход от кнопки в MapViewController к UINavigationController в раскадровке.

person Mohannad A. Hassan    schedule 05.06.2013
comment
что вы имеете в виду tableViewNavigationController, что это за свойство? self - это mapviewcontroller, у него нет интерфейса presentViewController No visible @interface for 'MapViewController' declares the selector 'pushViewController:animated: - person liv a; 06.06.2013
comment
@liva Я отредактировал свое решение. Это свойство должно быть UINavigationController, которое содержит tableViewController. - person Mohannad A. Hassan; 06.06.2013
comment
чтобы создать выход, мне нужно создать свой собственный класс, производный от UINavigationController, который ничего не делает, вместо этого я получаю экземпляр с этим self.navigationController = (UINavigationController*)[self.storyboard instantiateViewControllerWithIdentifier:@"myNavigationController"]; - person liv a; 06.06.2013
comment
Нет, вам не нужно создавать новый подкласс. Кстати переход от кнопки к UINavigationController намного проще. - person Mohannad A. Hassan; 06.06.2013
comment
self.navigationController = [self.storyboard instantiateViewControllerWithIdentifier:@"myNavigationController"]; не будет работать, потому что для того, чтобы вытолкнуть другой контроллер представления B из контроллера представления A, A должен уже управляться и представляться UINavigationController. Таким образом, этот UINavigationController будет фактически нажимать B. Упомянутый код строки ничего не сделает. - person Mohannad A. Hassan; 06.06.2013