Нажмите другой Viewcontroller с помощью кнопки действия в xib-файле

#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 .