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的某些公共属性。