Xcode, где назначить идентификатор segue

извините меня за вопрос новичка. Я знаю, что могу переключиться на другой экран (ViewController), как это

self.performSegueWithIdentifier ("SecondViewController", sender: self)

но я не могу найти, где назначить моему 2-му экрану идентификатор, я просто нахожу идентификатор раскадровки, не так ли?

Я уже пробовал, только получил сбой со следующей ошибкой:

Receiver () не имеет segue с идентификатором 'SecondViewController'

есть идеи? спасибо

3 ответов


Идентификатор Segue is не аналогично раскадровка ID, раскадровка ID используется, когда вы хотите создать контроллер вида на основе этой конкретной раскадровки-и он должен быть уникальным, в отличие от идентификатора segue-.

если вы уже знаете, как создать переход, вы можете пропустить эту часть.

добавление перехода между двумя viewControllers:

в Построителе интерфейса нажмите кнопку ctrl и перетащите между двумя контроллерами вида, которые вы хотите связать (убедитесь, что вы перетаскиваете из самого контроллера вида, а не его основного вида). Вы должны увидеть:

enter image description here

выбрать "Показать" -например, вывод должен выглядеть так:

enter image description here

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

дополнительная информация: если вы выбрали опцию "Показать", вы должны встроить свой первый контроллер вида в навигационный контроллер (выберите свой первый viewController - > Editor - > Embed In - > Navigation Controller), выход должен выглядеть так:

enter image description here

потому что" показать " означает нажатие в стек навигационного контроллера.

присвоение идентификатора segue:

выберите segue, из инспектора атрибутов вы увидите текстовое поле "идентификатор", вот и все! обязательно вставьте то же самое имя, которое использовалось в performSegueWithIdentifier.

если вы не знаете, где найти инспектор атрибутов, он находится в правом верхнем углу выглядит так:

enter image description here


кроме того:

добавлять несколько сегменты с одного вида Контроллер, выполните тот же процесс (ctrl + перетащите с первого контроллера на другой контроллер вида), выход должен выглядеть так:

enter image description here

в этом случае вы можете столкнуться с проблемой, как распознать, какой сегмент был выполнен, переопределяя 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)

enter image description here