#ios #iphone #swift #xcode #uiviewcontroller
#iOS #iPhone #быстрый #xcode — код #uiviewcontroller
Вопрос:
У меня есть viewcontroller, который представляет из a .xib
. Внутри .xib
есть кнопка; Я хочу, чтобы кнопка нажимала viewcontroller на другой viewcontroller ( ViewControllerPeopleNew
).
Я использую кнопку действия:
@IBAction func _hitPeople(sender: AnyObject) {
let mapViewControllerObejct = self.storyboard?.instantiateViewControllerWithIdentifier("peoplenew") as? ViewControllerPeopleNew
self.navigationController?.pushViewController(mapViewControllerObejct!, animated: false)
}
Но получил ошибку:
Сигнал SIGABRT
нераспознанный селектор, отправленный экземпляру
Я уже проверил все об идентификаторе имени viewcontroller, и все в порядке.
Комментарии:
1. попробуйте распечатать свой NavigationController, убедитесь, что он не равен null
2. Не начинайте имя функции с _.
3. Прежде всего, контроллер представления, созданный из xib, не принадлежит ни к какой раскадровке. Итак, это self.storyboard равен нулю, что означает, что он не может создать экземпляр контроллера представления из раскадровки, потому что он ничего не знает.
4. как с этим справиться? @Adeel
5. нет никакой разницы, начинаю ли я имя функции с _ или нет @matt
Ответ №1:
Из контроллера представления, присутствующего в XIB, вы не можете получить раскадровку, используя приведенный ниже код
@IBAction func _hitPeople(sender: AnyObject) {
let storyboard = UIStoryboard(name: "storyboadname", bundle: nil)
let mapViewControllerObejct = storyboard.instantiateViewControllerWithIdentifier("peoplenew") as? ViewControllerPeopleNew
self.navigationController?.pushViewController(mapViewControllerObejct!, animated: false)
}
Ответ №2:
Всегда помните, что вы можете использовать self.storyBoard
для создания экземпляра контроллера представления только тогда, когда оба контроллера представления ( To and From view controllers
) принадлежат одному и тому же storyboard
. Если нет, то вам нужно сначала получить ссылку на storyboard
ваш To view controller
принадлежит. Итак, вам нужно сделать это:
@IBAction func _hitPeople(sender: AnyObject) {
let stotyboard = UIStoryboard(name: "YourStoryboard", bundle: nil)
let mapViewControllerObejct = storyboard?.instantiateViewControllerWithIdentifier("peoplenew") as? ViewControllerPeopleNew
self.navigationController?.pushViewController(mapViewControllerObejct!, animated: false)
}
PS: Просто убедитесь, что ваш From view controller
находится в стеке навигации, т.Е. self.navigationController
Нет nil
.