如何以编程方式指定segue(不执行segue)?
问题描述:
AView.m
UIButton *btn = [[UIButton alloc]initWithFrame()];
[btn addTarget:self action:@selectior(perpareForSegue:sender:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:btn];
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
//I want to get destinationViewController of segue with identifier"toNextView"
// and then perform the segue
// Difficulties that I encounter is that I have a NSInvalidArgumentException
// Is that mean the view controller doesn't know the existence of the segue?
// I have connected two controller with a segue
}
我想用标识符“toNextView”赛格瑞的 destinationViewController,然后执行SEGUE 困难,我遇到的是,我有一个NSInvalidArgumentException 是指视图控制器不知道SEGUE的存在? 我已连接两个控制器与一个segue 谢谢如何以编程方式指定segue(不执行segue)?
答
看看class reference of UIStoryboardSegue。
该方法prepareForSegue:发件人:由故事板运行时在触发segue时调用。这并不意味着被称为执行segue。
下面是从类引用的解释:
当SEGUE被触发,但视觉转变发生之前, 故事板运行时调用当前视图控制器的 prepareForSegue:发送方:方法使得它可以通过任何需要的数据到 即将显示的视图控制器。
从类参考:
您仍然可以启动赛格瑞编程方式使用 performSegueWithIdentifier:发件人:如果UIViewController中的方法,你想 。您可能会这样做,以编程方式添加 ,因此在Interface Builder中不可用,从而启动segue。
所以,只需指定按钮的选择,然后里面选择就叫performSegueWithIdentifier:发件人:方法。
[btn addTarget:self action:@selector(whateverAction) forControlEvents:UIControlEventTouchUpInside];
- (void)whateverAction {
[self performSegueWithIdentifier:@"toNextView" sender:nil];
}
如果你想要一个对象传递给SEGUE的目的地视图控制器,这是其中prepareForSegue:发件人:方法进场时在课堂上引用解释,例如:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"toNextView"]) {
DestinationViewController *vc = (DestinationViewController *)[segue destinationViewController];
//do whatever you want to do with vc, including passing of data, setting property, etc.
}
}
谢谢,但我可以在将数据传递给destiniation视图控制器时执行SegueWithIdentifier吗? – user2429523
@ user2429523这就是prepareForSegue方法的用法。我更新了我的答案。 –
非常好...它可以解决,另外问题:如何将点击按钮的标签发送到目标视图控制器? – user2429523