Segue между двумя контроллерами представления
![enter image description here]()
На моем раскадровке (показано выше) у меня есть ViewController, который содержит MKMapView с аннотациями. Эти аннотации содержат значок раскрытия, который при нажатии на него должен перемещаться пользователем на другой ViewController. Для этого я создал push-сегмент между контроллерами представлений. Затем я дал ему идентификатор "showDetail" и реализовал следующий код.
- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control
{
[self performSegueWithIdentifier:@"showDetail" sender:self];
}
Однако я получаю следующую ошибку.
Could not find a navigation controller for segue 'showDetail'. Push segues can only be used when the source controller is managed by an instance of UINavigationController.'
Где я ошибаюсь? Я попытался изменить свой исходный UIViewController на UINavigationController, но представление затем просто отображается как черный экран.
Ответы
Ответ 1
Фактически вам нужно установить UIViewController в качестве корневого контроллера UINavigationController (или проталкиваться из контроллера представления с помощью навигатора). Для этого
- Перетащите новый навигационный контроллер в свою раскадровку - это будет
по умолчанию подключаться к контроллеру таблицы.
- Удалить контроллер таблицы. Щелкните правой кнопкой мыши навигацию
контроллера и подключить свойство "Root View Controller" к вашему
существующий контроллер представления
- Переместите стрелку точки входа из контроллера просмотра в корневой каталог
просмотр контроллера
Ответ 2
Простейший способ сделать это - выбрать контроллер просмотра, которым вы хотите быть корнем вашей иерархии навигации, и выбрать
Editor > Embed In > Navigation Controller
Это создает новый контроллер навигации и подбирает все для вас.
Ответ 3
выполните следующие действия:
1. щелкнуть соединение между двумя контроллерами.
2. Щелкните указатель атрибута атрибута
3. установите идентификатор в "showDetail".
4. Сохраните и запустите.