【问题标题】:Push another Viewcontroller from action button in xib file从 xib 文件中的操作按钮推送另一个 Viewcontroller
【发布时间】:2016-10-14 11:43:54
【问题描述】:

我有一个来自.xib 的视图控制器。 .xib 里面有一个按钮;我希望按钮将视图控制器推送到另一个视图控制器 (ViewControllerPeopleNew)。

我使用操作按钮:

@IBAction func _hitPeople(sender: AnyObject) {
    let mapViewControllerObejct = self.storyboard?.instantiateViewControllerWithIdentifier("peoplenew") as? ViewControllerPeopleNew
    self.navigationController?.pushViewController(mapViewControllerObejct!, animated: false)
}

但出现错误:

信号 SIGABRT
无法识别的选择器发送到实例

我已经检查了有关名称标识符 viewcontroller 的所有内容,一切正常。

【问题讨论】:

  • 尝试打印你的navigationController,确保它不为空
  • 函数名不要以_开头。
  • 首先,从 xib 实例化的视图控制器不属于任何情节提要。所以它的 self.storyboard 为 nil,这意味着它不能从故事板实例化视图控制器,因为它不知道任何东西。
  • 如何处理? @Adeel
  • 函数名以_开头还是@matt没有区别

标签: ios iphone swift xcode uiviewcontroller


【解决方案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】:

    永远记住,当两个视图控制器 (To and From view controllers) 属于同一个 storyboard 时,您只能使用 self.storyBoard 来实例化视图控制器。如果没有,那么您需要首先获取对您的To view controller 所属的storyboard 的引用。所以你需要这样做:

    @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

    【讨论】:

      猜你喜欢
      • 2015-05-28
      • 2019-01-03
      • 1970-01-01
      • 2018-03-08
      • 1970-01-01
      • 1970-01-01
      • 2016-05-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多