以编程方式创建push segue并准备forsegue方法

时间:2014-09-30 15:46:27

标签: ios objective-c segue uistoryboardsegue

我有一个以编程方式创建的按钮,我需要在click上执行segue,它将使用prepareForSegue发送数据,但此代码不会触发它。

UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle: nil];
UIViewController * vc = [mainStoryboard instantiateViewControllerWithIdentifier:@"AddToCalendarViewController"];

[self.navigationController pushViewController:vc animated:YES];

我试过这个:

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

但是由于按钮是用语法创建的,所以我没有要调用的任何segue标识符,并且使用以下内容来创建它不起作用

UIStoryboardSegue * segue = [[UIStoryboardSegue alloc] initWithIdentifier:@"addtoCalendar" source:self destination:vc];

2 个答案:

答案 0 :(得分:2)

不得以编程方式创建

UIStoryboardSegue。通过将视图控制器连接到故事板中的目标视图控制器来创建segue,并将其标识符放到@"addToCalendar"(始终在故事板中)。然后按照你已经做的那样打电话。

答案 1 :(得分:0)

如果按下按钮时没有真实的故事板,则需要拨打addTarget:action:forControlEvents,其中actiontarget方法的选择器被称为。

具体来说,首先需要创建一个推送目标视图控制器的方法,如下所示:

- (void)addToCalendar {
    DestinationiewController * vc = [[DestinationViewController alloc] initWithNibName:@"destinationViewController" bundle:nil;
    [self.navigationController pushViewController:vc animated:YES];
}

然后在视图控制器的viewDidLoad(或者以编程方式实例化按钮的任何地方),您需要添加

[self.button addTarget:self action:@selector(@"addToCalendar") forControlEvents: UIControlEventTouchUpInside];

将调用您在上面定义的addToCalendar方法。