Ios 不使用PrepareForegue推送到另一个视图控制器

Ios 不使用PrepareForegue推送到另一个视图控制器,ios,objective-c,uiviewcontroller,uistoryboardsegue,pushviewcontroller,Ios,Objective C,Uiviewcontroller,Uistoryboardsegue,Pushviewcontroller,如果没有prepareforsgue,如何推送到另一个视图控制器 myClassVC *viewController = [myClassVC alloc]; UIStoryboardSegue *segue = [[UIStoryboardSegue alloc] initWithIdentifier:@"pushToMyVC" source:self destination:viewController]; if ([segue.identifier isEqualToString:@"p

如果没有
prepareforsgue
,如何推送到另一个视图控制器

myClassVC *viewController = [myClassVC alloc];
UIStoryboardSegue *segue = [[UIStoryboardSegue alloc] initWithIdentifier:@"pushToMyVC" source:self destination:viewController];

if ([segue.identifier isEqualToString:@"pushToMyVC"]) {
 NSLog(@"logging");
 myClassVC *viewController = (myClassVC *)[segue destinationViewController];
 [self presentViewController:viewController animated:YES completion:nil];        
}

[自呈现viewController:viewController动画:是完成:无],因为segue将使用您自动选择的转换推送目标视图控制器

如果您不想使用
segue
过程,则需要使用以下命令手动推送视图控制器:


[自呈现viewController:viewController动画:是完成:无]


但请确保先删除序列图像板中的序列。

如果要以编程方式调用推送序列,请在Interface Builder中为序列图像提供一个“序列图像板id”,然后可以:

[self performSegueWithIdentifier:"pushToMyVC" sender:self];
UIViewController *controller = [self.storyboard instantiateViewControllerWithIdentifier:@"DestinationController"];
[self.navigationController pushViewController:controller animated:YES];
或者,如果不想执行segue,可以实例化目标视图控制器,然后手动推送到该视图控制器。您需要做的只是确保目标视图控制器在Interface Builder中有自己的“情节提要id”,然后您可以:

[self performSegueWithIdentifier:"pushToMyVC" sender:self];
UIViewController *controller = [self.storyboard instantiateViewControllerWithIdentifier:@"DestinationController"];
[self.navigationController pushViewController:controller animated:YES];
你说的是“推”(因此我在上面使用了
pushViewController
)。如果您真的想“呈现一个模态视图控制器”,那么第二行是:

[self presentViewController:controller animated:YES completion:nil];
如您所见,您不必使用
prepareForSegue
推送到新场景。如果要将信息传递给目标视图控制器,只能使用
prepareforsgue
。否则就不需要了

显然,如果您没有使用故事板(例如,您使用的是NIB),那么过程就完全不同了。但我假设您没有使用NIBs,因为
prepareforsgue
不适用于该环境。但如果您使用的是NIB,它将如下所示:

SecondViewController *controller = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
[self.navigationController pushViewController:controller animated:YES];

在我的例子中,所有ViewController都是动态构建的。我没有为此目的使用故事板。如果是这种情况,您可以只实例化要打开的viewController类,并进行推送,如下面的示例所示:

MyViewController* myViewController = [[MyViewController alloc] init];
[self.navigationController pushViewController:myViewController animated:YES];

这个答案非常有用!在这种情况下,我如何准备segue?简单!您只需在viewController实例化之后和调用pushViewController方法之前执行此操作。例如,可以设置viewController的某些公共属性。