PerformSegueWithIdentifier не имеет идентификатора с идентификатором
Во время тестирования моего приложения я столкнулся с сбоем. Следующее изображение - это раскадровка:
![storyboard]()
У меня есть код в View Controller:
@IBAction func unwindToHomeScreen(segue:UIStoryboardSegue) {
}
В представлении "Добавить новый элемент" есть кнопка "Отмена", которую я контролировал - перетащите ее на значок "Выход" вверху и ссылку на unwindToHomeScreen
, он отлично работает.
В "Добавить новый элемент" есть класс AddTableViewController
и код, который я написал внутри:
@IBAction func save() {
// Execute the unwind segue and go back to the home screen
performSegueWithIdentifier("unwindToHomeScreen", sender: self)
}
Я контролировал - перетащил кнопку "Сохранить" на функцию, но при авариях приложения, когда я нажимаю кнопку
Я могу использовать dismissViewControllerAnimated(true, completion: nil)
вместо этого, но мне просто интересно, почему performSegueWithIdentifier
не может работать?
Я прочитал код dropbox.com/s/hpybgg9x67rtqng/foodpinstatictable.zip?dl=0 и попытаюсь сделать его и используя performSegueWithIdentifier
, как этот пример для практики, я не сделал см. идентификатор segue на ней, в чем разница?
Ответы
Ответ 1
Фактически вы не указали этот идентификатор. unwindToHomeScreen
- это функция, которую вы можете вызвать; то, что вы ищете, является вашим идентификатором segue, который установлен в Interface Builder следующим образом:
![Set an identifier]()
В этом примере у меня есть кнопка, подключенная к следующему представлению через Interface Builder, как вы описываете ( "Interface Builder" ), и кнопку, которая подключена к этому IBAction
в моем контроллере представления ( "Programmatically" ):
@IBAction func goToNextView(sender: UIButton!) {
self.performSegueWithIdentifier:("go", sender: self)
}
В любом случае, вам не хватает фактического идентификатора, который может быть установлен в атрибутах segue, созданных в Interface Builder.
Ответ 2
Я обнаружил, что, поскольку я переименовал свой контроллер представления, мне нужно было удалить и воссоздать segue.
Ответ 3
в моем случае измените порядок вставки в
Контроллер панели вкладок Контроллер навигации vc (содержит кнопку - нажатие кнопки инициирует переход "show, например push")
Слишком исправить заголовок в панели навигации
Ответ 4
Возможная проблема с iOS 12 и более ранними версиями (iOS 13, похоже, не страдает от той же проблемы) может быть связана с тем, что executeSegue (withIdentifier:, sender :) вызывается из обратного вызова view viewididLoad() контроллера контроллера.
Вы обязательно должны вызвать его из обратного вызова viewDidAppear (_ animated: Bool), чтобы избежать упомянутого вопроса сбоя.
Это, безусловно, сэкономит часы стрижки волос...
Ответ 5
Свифт 4:
Иногда мы должны очистить папку сборки, а затем повторить попытку: =)
Работал для меня после Ctrl-перетаскивания нового сегмента и присвоения ему имени, а затем использовал его программно как:
performSegue(withIdentifier: "goToMyNewViewController", sender: self)
Ответ 6
для меня → нажмите на ссылку-стрелка между контроллерами представлений, а затем выберите атрибут-инспектор, есть идентификатор, укажите имя и выберите push-класс...