从 xib 文件中的操作按钮推送另一个 Viewcontroller
Posted
技术标签:
【中文标题】从 xib 文件中的操作按钮推送另一个 Viewcontroller【英文标题】:Push another Viewcontroller from action button in xib file 【发布时间】: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没有区别 【参考方案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
。
【讨论】:
以上是关于从 xib 文件中的操作按钮推送另一个 Viewcontroller的主要内容,如果未能解决你的问题,请参考以下文章
如何在swift中按下按钮从另一个xib文件加载另一个xib文件