我必须使用函数,它们都使用相同的segue触发performSegueWithIdentifier
。但是根据调用的函数,我需要在prepareForSegue
中传递不同的参数。
有点像
func first() {
// do some stuff
performSegueWithIdentifier("My segue", sender:AnyObject?)
}
func second() {
// do some stuff
performSegueWithIdentifier("My segue", sender:AnyObject?)
}
func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "My segue" {
let destination = segue.destinationViewController as! MyController
if functionFirstWasCalled {
destination.property = value
} else if functionSecondWasCalled {
destination.property = anotherValue
}
}
}
当然,我可以通过设置第二个()和第一个()的布尔值然后在prepareForSegue
中检查它们来实现这一点 - 但也许有一些更优雅的方法可以做到这一点?
答案 0 :(得分:0)
在目标-c中你会这样做:
[self performSegueWithIdentifier:@"segueNAme" sender:@"firstMethod"];
您可以在prepareForSegue方法
中访问此消息- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
if ([sender isEqualToString:@"firstMethod"]) {
//firstMEthod called the segue
}
}
我认为快速的等价物将是:
self.performSegueWithIdentifier("segueNAme", sender: "firstMethod")
和
func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject) {
if (sender == "firstMethod") {
//firstMEthod called the segue
}
}
我的建议是,不是发送普通字符串,而是发送包含methodName,className和其他一些对将来调试有用的参数的字典类型对象。
答案 1 :(得分:0)
您所要做的就是通过sender属性发送一个标志,如下所示:
func first() {
performSegueWithIdentifier("My segue", sender:true)
}
func second() {
// do some stuff
performSegueWithIdentifier("My segue", sender:false)
}
func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "My segue" {
let destination = segue.destinationViewController as! MyController
let isFirstFunctionCalled = sender as! Bool // cast sender to bool
if isFirstFunctionCalled {
destination.property = value
} else {
destination.property = anotherValue
}
}
}
答案 2 :(得分:-1)
只需在此View Controller中设置并行属性,然后根据调用的函数将其传递到目标View Controller。即:
var a = ""
var b = 0
func first() {
// do some stuff
a = "first function determined this variable."
b = 1
performSegueWithIdentifier("My segue", sender:AnyObject?)
}
func second() {
// do some stuff
a = "second function determined this variable."
b = 182
performSegueWithIdentifier("My segue", sender:AnyObject?)
}
func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "My segue" {
let destination = segue.destinationViewController as! MyController
if functionFirstWasCalled {
destination.property = a
} else if functionSecondWasCalled {
destination.property = b
}
}
}