Xcode, где назначить идентификатор segue
извините меня за вопрос новичка. Я знаю, что могу переключиться на другой экран (ViewController), как это
self.performSegueWithIdentifier ("SecondViewController", sender: self)
но я не могу найти, где назначить моему 2-му экрану идентификатор, я просто нахожу идентификатор раскадровки, не так ли?
Я уже пробовал, только получил сбой со следующей ошибкой:
Receiver () не имеет segue с идентификатором 'SecondViewController'
есть идеи? спасибо
3 ответов
Идентификатор Segue is не аналогично раскадровка ID, раскадровка ID используется, когда вы хотите создать контроллер вида на основе этой конкретной раскадровки-и он должен быть уникальным, в отличие от идентификатора segue-.
если вы уже знаете, как создать переход, вы можете пропустить эту часть.
добавление перехода между двумя viewControllers:
в Построителе интерфейса нажмите кнопку ctrl и перетащите между двумя контроллерами вида, которые вы хотите связать (убедитесь, что вы перетаскиваете из самого контроллера вида, а не его основного вида). Вы должны увидеть:
выбрать "Показать" -например, вывод должен выглядеть так:
как показано выше, стрелка, окруженная красным прямоугольником, является переходить.
дополнительная информация: если вы выбрали опцию "Показать", вы должны встроить свой первый контроллер вида в навигационный контроллер (выберите свой первый viewController - > Editor - > Embed In - > Navigation Controller), выход должен выглядеть так:
потому что" показать " означает нажатие в стек навигационного контроллера.
присвоение идентификатора segue:
выберите segue, из инспектора атрибутов вы увидите текстовое поле "идентификатор", вот и все! обязательно вставьте то же самое имя, которое использовалось в performSegueWithIdentifier
.
если вы не знаете, где найти инспектор атрибутов, он находится в правом верхнем углу выглядит так:
кроме того:
добавлять несколько сегменты с одного вида Контроллер, выполните тот же процесс (ctrl + перетащите с первого контроллера на другой контроллер вида), выход должен выглядеть так:
в этом случае вы можете столкнуться с проблемой, как распознать, какой сегмент был выполнен, переопределяя prepare(for:sender:)
метод является решением, вы можете сделать проверку на основе segue identifier
свойства:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if (segue.identifier == "firstSegueIdentifier") {
// ...
} else if (segue.identifier == "secondSegueIdentifier") {
//...
}
}
что бы имя, которое вы добавлено в segue в раскадровке.
когда вы связываете контроллер вида с другим контроллером вида в раскадровке, в ссылке между ними вам нужно назначить идентификатор segue i.e "SecondViewController" только тогда ваш код будет работать.
кроме того, вы также можете показать другой контроллер вида через раскадровку id с помощью self.раскадровка.instantiateViewControllerWithIdentifier ("//раскадровка id этого контроллера представления"), а затем либо использовать present / show View controller.
в коде
self.performSegueWithIdentifier ("SecondViewController", sender: self)
строка "SecondViewController" выглядит как id раскадровки . В том же месте вы должны написать идентификатор segue , а не идентификатор раскадровки .
следуйте скриншоту и назначьте имя идентификатора segue, нажав на поле segue в правом верхнем баре. вы можете сделать так
self.performSegueWithIdentifier ("WriteSegueIdentifierName", sender: self)