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”的segue的destinationViewController,然后执行segue遇到的困难是,我有一个NSInvalidArgumentException,这是否意味着视图控制器不知道segue的存在?我已经用一个网段连接了两个控制器。
发布于 2013-06-01 17:15:57
看一看class reference of UIStoryboardSegue。
当segue被触发时,故事板运行时调用准备triggered :sender:方法。它并不意味着要被调用来执行段。
下面是来自类引用的解释:
当段被触发时,但在视觉转换发生之前,故事板运行时调用当前视图控制器的
:segue::method方法,以便它可以将任何需要的数据传递给即将显示的视图控制器。
从类引用中:
如果需要,您仍然可以使用UIViewController的performSegueWithIdentifier:
:方法以编程方式启动段。您可以这样做,以便从以编程方式添加的源启动段,因此在Interface Builder中不可用。
因此,只需指定按钮的选择器,然后在选择器中调用performSegueWithIdentifier:sender: method。
[btn addTarget:self action:@selector(whateverAction) forControlEvents:UIControlEventTouchUpInside];
- (void)whateverAction {
[self performSegueWithIdentifier:@"toNextView" sender:nil];
}如果您想要将一个对象传递给segue的目标视图控制器,这就是准备for :sender: method发挥作用的地方,如类引用中所述,例如:
- (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.
}
}https://stackoverflow.com/questions/16870854
复制相似问题