Ios 将以编程方式调用的segue的发送方传递到目标
对不起,如果标题不是很清楚,但希望我可以在这里详细说明 我有一个ViewControllerIos 将以编程方式调用的segue的发送方传递到目标,ios,objective-c,storyboard,segue,Ios,Objective C,Storyboard,Segue,对不起,如果标题不是很清楚,但希望我可以在这里详细说明 我有一个ViewControllerMatchLineupViewController,它显示22个按钮来代表球队中的橄榄球运动员。当用户点击这些按钮中的任何一个时,将通过以下方法以编程方式调用模态序列: - (IBAction) showSquadSelector:(UIButton *)sender { [self performSegueWithIdentifier:@"SeguePopupSquad" sender:send
MatchLineupViewController
,它显示22个按钮来代表球队中的橄榄球运动员。当用户点击这些按钮中的任何一个时,将通过以下方法以编程方式调用模态序列:
- (IBAction) showSquadSelector:(UIButton *)sender {
[self performSegueWithIdentifier:@"SeguePopupSquad" sender:sender];
}
随后显示的模态ViewController称为SquadSelectViewController
。它将选定的播放器对象传递回充当代理的MatchLineupViewController
。这很好用
但是,我想将返回对象的profile\u picture
属性分配给首先发送segue的ui按钮
编辑-返回的对象是NSDictionary,如下代码所示:
- (void) selectPlayer:(NSDictionary *)player forButton:(UIButton *)sender {
[sender.imageView setImage:[UIImage imageWithContentsOfFile:[player objectForKey:@"profile_picture"]]];
}
我该怎么做呢?如果您需要任何进一步的代码来理解我的要求,我可以提供它
非常感谢,,
克里斯
编辑-
- (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]);
}
您可以将showSquadSelector:
方法的发送方
转发到segue,如下所示:
[self performSegueWithIdentifier:@"SeguePopupSquad" sender:sender];
segue的发送者
将是触发segue的按钮,因此从segue触发的代码将知道是哪个按钮触发了它:您的prepareforsgue:
将具有正确的ui按钮
。现在,您可以按预定键(例如,@“senderButton”
)将其添加到返回的字典中,并在从segue返回时对其进行检查。您可以将showSquadSelector:
方法的发送方
转发给segue,如下所示:
[self performSegueWithIdentifier:@"SeguePopupSquad" sender:sender];
segue的发送者
将是触发segue的按钮,因此从segue触发的代码将知道是哪个按钮触发了它:您的prepareforsgue:
将具有正确的ui按钮
。现在,您可以按预定键(例如,@“senderButton”
)将其添加到返回的字典中,并在从segue返回时对其进行检查。“返回的对象”-返回的对象是什么?返回的对象是播放器数据的NSDictionary,例如名称、配置文件图片和数据库ID。它是从“子对象”发送的ViewController通过使用代理返回“父”ViewController。-(void)选择player:(NSDictionary*)player{//work with returned NSDictionary},然后在委托方法中:dictionary[@“profile_picture”]=按钮
,是吗?问题在于首先确定启动流程的按钮,因为所有22个按钮都调用相同的showSquadSelector
方法。啊,我明白了。然而,Dasblinkenlight似乎刚刚回答了您的问题。“返回对象的名称”-返回的对象是什么?返回的对象是播放器数据的NSDictionary,例如名称、配置文件图片和数据库ID。它通过使用代理从“子”ViewController发送回“父”ViewController。-(void)选择player:(NSDictionary*)player{//work with returned NSDictionary},然后在委托方法中:dictionary[@“profile_picture”]=按钮
,是吗?问题在于首先确定启动流程的按钮,因为所有22个按钮都调用相同的showSquadSelector
方法。啊,我明白了。然而,Dasblinkenlight似乎刚刚回答了您的问题。我已经尝试了这个,并在我的问题中发布了更新的代码。它似乎不起作用。我猜我在某个地方错误地传递了按钮?如果您仍然有按钮,请检查日志记录,但请注意,您通常使用setImage:forControlState:
-将其直接指定给图像视图可能不会让按钮重新排列其子视图以显示它。@ChrisMatthews,在prepareForSegue时未设置目标视图控制器中的出口,因此执行ssvc.senderButton=发送方将不起作用(senderButton将为零)。如果成功,问题是我试图使用sender.imageView setImage
方法,而不是sender setImage:forControlState
。我已经尝试过了,并在我的问题中发布了更新的代码。它似乎不起作用。我猜我在某个地方错误地传递了按钮?如果您仍然有按钮,请检查日志记录,但请注意,您通常使用setImage:forControlState:
-将其直接指定给图像视图可能不会让按钮重新排列其子视图以显示它。@ChrisMatthews,在prepareForSegue时未设置目标视图控制器中的出口,因此执行ssvc.senderButton=发送方将不起作用(senderButton将为零)。使其起作用,问题是我试图使用sender.imageView setImage
方法,而不是sender setImage:forControlState
。