从 UIButton 调用 prepareforSegue?
Posted
技术标签:
【中文标题】从 UIButton 调用 prepareforSegue?【英文标题】:Calling prepareforSegue from a UIButton? 【发布时间】:2015-06-11 11:41:38 【问题描述】:我正在尝试通过UITableViewCell
中的按钮从TableViewController
中调用prepareForSegue
函数。
我可以直接从按钮调用它吗?比如:
TableView 控制器:
func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!)
if (segue.identifier == "segueExercise")
print(segue.identifier)
let vc = segue.destinationViewController as! DetailViewController
TableViewCell:
@IBAction func exerciseAction(sender: UIButton)
ViewController.prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!)
会不会太容易了,还是我错过了什么?
【问题讨论】:
谢谢。我只有一个问题,UIButton
仅在首先选择单元格时才有效(调用下一个视图并传递数据)。有没有办法在不先选择单元格的情况下从UIbutton
调用performSegueWithIdentifier
?
【参考方案1】:
PrepareForSegue
会在您调用 performSegueWithIdentifier
时自动触发(或者通过 Storyboard 连接两个 UIView CTRL-从第一个 UIView
拖动到第二个 UIView
)。你不能称之为“手动”
【讨论】:
再次检查代码我想我发现了问题。override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) if (segue.identifier == "segueExercise") print(segue.identifier) let vc = segue.destinationViewController as! SuggestionDetailViewController if let indexPath = self.tableView.indexPathForSelectedRow()
prepareForSegue
使用 indexPathForSelectedRow
进行索引。我已经将索引行放在按钮标签中,但我无法设法将该标签取回prepareForSegue
【参考方案2】:
是的,你可以,但你需要重写 prepareForSegue() 函数。如果您使用的是“仅代码”segue,则使用此选项,并可用于将值传递给新的视图控制器。例如,这是一款使用三个按钮的“Roshambo”游戏,一个仅带有代码,一个带有情节提要和代码,一个带有情节提要。一个 prepareForSegue() 用于根据哪个按钮调用 segue 来选择要传递的值。
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)
let nextController = segue.destinationViewController as! RoshamboViewController
nextController.opponentValue = self.randomRoshambo()
//determine which segue called prepareForSeque
if (segue.identifier == "choosePaper")
nextController.playerValue = "paper"
else if segue.identifier == "chooseScissors"
nextController.playerValue = "scissors"
【讨论】:
【参考方案3】:解决了。我通过UIButton
选项tag
传递了索引并替换了indexPathForSelectedRow
。
【讨论】:
以上是关于从 UIButton 调用 prepareforSegue?的主要内容,如果未能解决你的问题,请参考以下文章
如何从按钮外部调用 UIButton 图像上的 UIView 转换?