11

你怎么能在没有 的情况下推送到另一个视图控制器prepareForSegue

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];        
}
4

4 回答 4

46

如果您想以编程方式调用推送转场,请在 Interface Builder 中为转场提供“故事板 ID”,然后您可以:

[self performSegueWithIdentifier:"pushToMyVC" sender:self];

或者,如果您不想执行转场,您可以实例化目标视图控制器,然后手动推送到该视图控制器。您需要做的就是确保目标视图控制器在 Interface Builder 中有自己的“故事板 ID”,然后您可以:

UIViewController *controller = [self.storyboard instantiateViewControllerWithIdentifier:@"DestinationController"];
[self.navigationController pushViewController:controller animated:YES];

你说“推”(因此我在pushViewController上面使用)。如果你真的想“呈现一个模态视图控制器”,那么第二行是:

[self presentViewController:controller animated:YES completion:nil];

如您所见,您不必使用prepareForSegue送到新场景。仅prepareForSegue当您想将信息传递给目标视图控制器时才使用。否则不需要。

显然,如果您不使用情节提要(例如,您使用的是 NIB),那么过程就完全不同了。但我假设您没有使用 NIB,因为prepareForSegue它不适用于该环境。但是,如果您使用的是 NIB,则如下所示:

SecondViewController *controller = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
[self.navigationController pushViewController:controller animated:YES];
于 2013-03-12T21:11:51.977 回答
3

[self presentViewController:viewController animated:YES completion:nil];不需要,因为 segue 将使用您自动选择的转换推送目标视图控制器。

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

[self presentViewController:viewController animated:YES completion:nil];

但请确保首先删除情节提要中的转场。

于 2013-03-12T21:04:28.637 回答
0
   NSString * storyboardName = @"Main";
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:storyboardName bundle: nil];
    UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"SecondViewControllerID"];
    [self presentViewController:vc animated:YES completion:nil];
于 2016-10-19T06:09:35.200 回答
0

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

MyViewController* myViewController = [[MyViewController alloc] init];
[self.navigationController pushViewController:myViewController animated:YES];
于 2018-02-16T12:48:06.183 回答