如何在视图控制器中以编程方式切换视图?(Xcode,iPhone)

mis*_*126 44 storyboard uiviewcontroller swift swift3

一直苦苦挣扎这一段时间,似乎永远无法得到直接的答案.

任何帮助表示赞赏!

Sla*_*opy 87

如果您在导航控制器中:

ViewController *viewController = [[ViewController alloc] init];
[self.navigationController pushViewController:viewController animated:YES];
Run Code Online (Sandbox Code Playgroud)

或者如果您只是想呈现一个新视图:

ViewController *viewController = [[ViewController alloc] init];    
[self presentViewController:viewController animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)

  • 不用说,你现在很少通过调用`alloc`和`init`来实例化视图控制器.使用故事板,您可以使用`[self.storyboard instantiateViewControllerWithIdentifier @:"storyboard id"]`.或者如果使用带有segue的故事板,你只需直接用`[self performSegueWithIdentifier:@"storyboard id"sender:self];`执行segue,它将实例化新的视图控制器并一举过渡到它.如果使用NIB,如果NIB名称不同,则使用`[[NSBundle mainBundle] loadNibNamed:@"nibname"owner:self options:nil]`来实例化视图控制器. (7认同)
  • 请注意,`presentModalViewController:animated:`已在[UIViewController docs]中标记为已弃用(http://developer.apple.com/library/ios/#documentation/uikit/reference/UIViewController_Class/Reference/Reference.html ).`presentViewController:animated:completion:`应该用来代替. (4认同)
  • 我只是在这个问题,如果我使用第二个解决方案,我将能够回到上一个视图,以及如何? (2认同)

小智 33

如果要在同一个故事板中显示新视图,

在CurrentViewController.m中,

#import "YourViewController.h"

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
YourViewController *viewController = (YourViewController *)[storyboard instantiateViewControllerWithIdentifier:@"YourViewControllerIdentifier"];
[self presentViewController:viewController animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)

要将标识符设置为视图控制器,请打开MainStoryBoard.storyboard.选择YourViewController视图 - >实用程序 - > ShowIdentityInspector.在那里你可以指定标识符.


Kin*_*ard 18

Swift版本:

如果您在导航控制器中:

let viewController: ViewController = self.storyboard?.instantiateViewControllerWithIdentifier("VC") as ViewController
self.navigationController?.pushViewController(viewController, animated: true)
Run Code Online (Sandbox Code Playgroud)

或者,如果您只想呈现一个新视图:

let viewController: ViewController = self.storyboard?.instantiateViewControllerWithIdentifier("VC") as ViewController
self.presentViewController(viewController, animated: true, completion: nil)
Run Code Online (Sandbox Code Playgroud)


Luk*_*und 17

instantiateViewControllerWithIdentifierStoryboard ID.

NextViewController *NVC = [self.storyboard instantiateViewControllerWithIdentifier:@"NextViewController"];
[self presentViewController:NVC animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)


小智 5

通过CmdSft关闭使用之前的答案代码调用的Viewcontroller

    ViewController *viewController = [[ViewController alloc] init];    
    [self presentViewController:viewController animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)

您可以使用

    [self dismissViewControllerAnimated:YES completion: nil];
Run Code Online (Sandbox Code Playgroud)