将以编程方式称为segue的发送方传递给目标

时间:2013-03-21 21:58:54

标签: ios objective-c storyboard segue

如果标题不是很清楚,我很抱歉,但希望我能在这里详细说明。

我有一个ViewController MatchLineupViewController,它显示22个按钮来表示团队中的橄榄球运动员。当用户点击这些按钮中的任何一个时,将通过以下方法以编程方式调用模态segue:

- (IBAction) showSquadSelector:(UIButton *)sender {
    [self performSegueWithIdentifier:@"SeguePopupSquad" sender:sender];
}

然后显示的模态ViewController称为SquadSelectViewController。它将选定的玩家对象传递给MatchLineupViewControllerprofile_picture充当代表。这非常有效。

但是,我想将返回对象的UIButton属性分配给首先发送segue的- (void) selectPlayer:(NSDictionary *)player forButton:(UIButton *)sender { [sender.imageView setImage:[UIImage imageWithContentsOfFile:[player objectForKey:@"profile_picture"]]]; }

编辑 - 返回的对象是NSDictionary,如下面的代码所示:

- (IBAction) showSquadSelector:(UIButton *)sender {
    [self performSegueWithIdentifier:@"SeguePopupSquad" sender:sender];
}

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([segue.identifier isEqualToString:@"SeguePopupSquad"]) {
        SquadSelectViewController *ssvc = (SquadSelectViewController *) segue.destinationViewController;
        ssvc.myDelegate = self;
        ssvc.senderButton = sender;
    }
}

- (void) selectPlayer:(NSDictionary *)player forButton:(UIButton *)sender {
    [sender.imageView setImage:[UIImage imageWithContentsOfFile:[player objectForKey:@"profile_picture"]]];
    NSLog(@"%@", [player description]);
    NSLog(@"%@", [sender description]);
}

我该怎么做呢?如果您需要任何进一步的代码来理解我的要求,我可以提供它。

非常感谢, 克里斯

编辑 -

{{1}}

1 个答案:

答案 0 :(得分:1)

您可以将sender方法的showSquadSelector:转发给segue,如下所示:

[self performSegueWithIdentifier:@"SeguePopupSquad" sender:sender];

segue的sender将是触发segue的按钮,因此从segue触发的代码会知道哪个按钮触发了它:您的prepareForSegue:将具有正确的UIButton }。您现在可以使用预定的键(例如@"senderButton")将其添加到返回的字典中,并在从segue返回时进行检查。