Ios 以编程方式执行Segue并将参数传递给目标视图

Ios 以编程方式执行Segue并将参数传递给目标视图,ios,view,parameters,storyboard,segue,Ios,View,Parameters,Storyboard,Segue,在我的应用程序中,我有一个按钮以编程方式执行一个序列: - (void)myButtonMethod { //execute segue programmatically [self performSegueWithIdentifier: @"MySegue" sender: self]; } 我想知道是否有方法引用目标视图并向其传递一些参数 我知道在prepareForSegue方法中,我可以使用以下命令来引用它:myDestinationViewController*vc=

在我的应用程序中,我有一个按钮以编程方式执行一个序列:

- (void)myButtonMethod
{
    //execute segue programmatically
    [self performSegueWithIdentifier: @"MySegue" sender: self];
}
我想知道是否有方法引用目标视图并向其传递一些参数

我知道在
prepareForSegue
方法中,我可以使用以下命令来引用它:
myDestinationViewController*vc=[segue destinationViewController],但我不知道如何以编程方式执行segue

你有什么想法吗

谢谢,亚萨


更新:


我为这个问题感到抱歉!!!我只是发现,即使以编程方式调用segue,仍然会调用
prepareforsgue
方法,因此可以以相同的常规方式传递参数。

答案很简单,segue的触发方式没有区别


prepareforsgue:sender:
方法在任何情况下都会被调用,这是传递参数的地方。

旧问题,但下面是关于如何执行所问操作的代码。在这种情况下,我将数据从表视图中的选定单元格传递到另一个视图控制器

在trget视图的.h文件中:

@property(weak, nonatomic)  NSObject* dataModel;
在.m文件中:

@synthesize dataModel;
dataModel
可以是
string
int
,在本例中,它是一个包含许多项的模型

- (void)someMethod {
     [self performSegueWithIdentifier:@"loginMainSegue" sender:self];
 }
或者


我理解在一个地方执行segue并维护状态以发送参数以准备segue的问题

我想出了一个办法。我使用一个类别向ViewController添加了一个名为userInfoDict的属性。我还用标识符覆盖了performsegue,这样一来,如果发送方是self(表示控制器本身)。它将把这个userInfoDict传递给下一个ViewController

在这里,您不需要传递整个UserInfoDict,还可以传递特定的参数作为发送方,并相应地进行覆盖


你需要记住的一件事。不要忘记在您的performsgue方法中调用super方法。

以防您使用新的swift版本

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "ChannelMoreSegue" {

        }
}
Swift 4: Swift 3:
将更新添加为答案并接受它,以便人们知道已回答此问题:)添加答案,注释以通知。您应该将答案标记为正确,以便人们知道已回答此问题。这仍然困扰着我-这意味着我必须在一个位置触发segue,在这里,我有我想作为参数发送的数据,这些数据与其他任何数据都很好地隔离开来,但是要将这些数据添加到一个完全不同的地方——prepareForSegue,在这里,我们对需要传递的数据一无所知。也就是说,我必须在由两个不同函数(一个触发segue,另一个-preparing)共享的上下文中创建一个有问题的数据的状态。当我只需要打开一个包含一些数据的新视图时,我不想弄脏状态…使用sender传递配置目标VCI所需的上下文我假设在sender中传递负载是一种反模式。它应该只包含触发segue的人的信息,而不是触发segue的东西打算进一步传递的数据。从发送者的官方文档中可以看出:“这个对象在实际segue期间用于提供信息。”是的,不要传递实际的负载,传递上下文,比如哪个单元格/按钮/索引/etc触发了segue。
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "ChannelMoreSegue" {

        }
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "ExampleSegueIdentifier" {
        if let destinationVC = segue.destination as? ExampleSegueVC {
            destinationVC.exampleString = "Example"
        }
    }
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if segue.identifier == "ExampleSegueIdentifier" {
            if let destinationVC = segue.destinationViewController as? ExampleSegueVC {
                destinationVC.exampleString = "Example"
            }
        }
    }