我正在尝试将2个控制器与segue连接在一起。我有一个带有6个按钮的视图控制器,点击按钮后会显示tableviewcontroller
。我创建了所有链接,将标识符提供给segue等。
tableviewcontroller
中有一个数组应该显示过滤结果,具体取决于触发segue的按钮
我该如何编写prepareforsegue
方法?
这就是我正在做的事情
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "chooseBrand" {
if sender?.tag == 1 {
let destinationController = segue.destinationViewController as! SelectionTableViewController
let numberOfCameras = destinationController.Camera.count
}
问题是我收到此错误消息
"无法转换类型' UINavigationController' (0x10a0ef588) 到' myApp.SelectionTableViewController' (0x108658b90)"
如何根据按下的按钮定义tableview
中selectiontableviewcontroller
的内容?
非常感谢任何帮助:)
答案 0 :(得分:2)
发件人到底是什么人?错误是说tag = 1的sender不是SelectionTableViewController。
无论如何,你可以做的只是将每个按钮连接到相同的动作插座方法,并在两个控制器之间有一个通用的segue
。然后,当您按下按钮A,B,C,D,E或F时,只需检查它们的tag
(或将它们存储为控制器类中的变量),并将您想要的任何内容发送给控制器。重要的是控制器之间的segue位于两个控制器之间,而不是另一个控制器的每个segue
UIButton
。在下面的示例中,我假设您将六个UIButton中的每一个存储为类变量。
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "segueFromFirstToSecond" {
let destinationController = segue.destinationViewController as! SelectionTableViewController
if sender = button1 {
let numberOfCameras = destinationController.Camera.count
} else if sender == button2 {
let numberOfCameras = destinationController.Camera.count
}
}
@IBAction func buttonPressed(sender: AnyObject) {
performSegueWithIdentifier(segueProfileToPul, sender: sender)
}
将所有按钮连接到buttonPressed()
。我不认为这行let numberOfCameras = destinationController.Camera.count
有效,因为SelectionTableViewController尚未实例化,因此其变量中没有值(我认为)。您正在寻找的可能是设置此值destinationController.Camera.count = someValue
。也许我错了。
修改强> 我上传了一个显示我的意思的测试项目。注意我在故事板中所建立的联系。下载here