如何以编程方式指定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. 
    } 
} 
+0

谢谢,但我可以在将数据传递给destiniation视图控制器时执行SegueWithIdentifier吗? – user2429523

+0

@ user2429523这就是prepareForSegue方法的用法。我更新了我的答案。 –

+0

非常好...它可以解决,另外问题:如何将点击按钮的标签发送到目标视图控制器? – user2429523