如何以编程方式调用视图控制器?

我已经看了所有我能找到的关于这个的教程,但是我仍然没有答案。我需要从代码中调用另一个视图。我正在使用 UIStoryboards。我已经改变了从 UIButtons的控制拖动视图很多次,但现在它必须从代码。我试图从主菜单调用信息页面,如果这是用户第一次打开应用程序。然而,我似乎找不到一种方法来改变代码中的视图。我的所有视图都由相同的文件(ViewController2)控制。我的主菜单的 identifierViewControllerMain,信息页面的 identifierViewControllerInfo。首先我试了这个:

[ViewControllerMain presentViewController: ViewControllerInfo
animated:YES
completion: NULL];

然后,我试着为每个人制作不同的 UIViewControllers,并说:

[ViewController2 presentViewController: ViewController
animated:YES
completion: NULL];

两个都没用,第一个上面写着:

使用未声明的标识符 ViewControllerMain。

在第二篇文章中,它写道:

意外的接口名称“ ViewController”: 预期的标识符。

我能做什么?

137235 次浏览

创建视图控制器:

UIViewController * vc = [[UIViewController alloc] init];

要调用一个视图控制器(必须从另一个视图控制器中调用) :

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

首先,使用 nil 而不是 null。


从故事板加载视图控制器:

NSString * storyboardName = @"MainStoryboard";
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:storyboardName bundle: nil];
UIViewController * vc = [storyboard instantiateViewControllerWithIdentifier:@"IDENTIFIER_OF_YOUR_VIEWCONTROLLER"];
[self presentViewController:vc animated:YES completion:nil];

视图控制器的 Identifier要么等于视图控制器的类名,要么等于可以在故事板的身份检查器中指定的故事板 ID。

您需要从情节串连图板实例化视图控制器,然后显示它:

ViewControllerInfo* infoController = [self.storyboard instantiateViewControllerWithIdentifier:@"ViewControllerInfo"];
[self.navigationController pushViewController:infoController animated:YES];

此示例假定您有一个导航控制器,以便返回到上一个视图。当然,您也可以使用 presViewController: Animated: complete: 。主要的一点是让故事板使用目标视图控制器的 ID 实例化您的目标视图控制器。

有两种方法可以做到这一点:

1,在故事板中创建一个到 ViewController 的接口,正如我在这里的回答中解释的那样: 如何在 iOS5中执行与用户输入无关的接口?

2,给你的 ViewController 和标识符,并使用我在这里回答的代码调用它: 程序化地调用故事板场景(不需要继续) ?

如果需要使用 NavigationController,可以以这种方式调用 ViewController

enter image description here

在当前屏幕中: 加载新屏幕

VerifyExpViewController *addProjectViewController = [[VerifyExpViewController alloc] init];
[self.navigationController pushViewController:addProjectViewController animated:YES];

2.1在加载视图中: 在.h 文件中添加以下内容

@interface VerifyExpViewController : UIViewController <UINavigationControllerDelegate>

2.2在加载视图中: 添加下面的.m 文件

  @implementation VerifyExpViewController


- (void)viewDidLoad
{
[super viewDidLoad];


self.navigationController.delegate = self;
[self setNavigationBar];
}
-(void)setNavigationBar
{
self.navigationController.navigationBar.backgroundColor = [UIColor clearColor];
self.navigationController.navigationBar.translucent = YES;
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"B_topbar.png"] forBarMetrics:UIBarMetricsDefault];
self.navigationController.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName: [UIColor whiteColor]};
self.navigationItem.hidesBackButton = YES;
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"Btn_topback.png"] style:UIBarButtonItemStylePlain target:self action:@selector(onBackButtonTap:)];
self.navigationItem.leftBarButtonItem.tintColor = [UIColor lightGrayColor];
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"Save.png"] style:UIBarButtonItemStylePlain target:self action:@selector(onSaveButtonTap:)];
self.navigationItem.rightBarButtonItem.tintColor = [UIColor lightGrayColor];
}


-(void)onBackButtonTap:(id)sender
{
[self.navigationController popViewControllerAnimated:YES];
}
-(IBAction)onSaveButtonTap:(id)sender
{
//todo for save button
}


@end

希望这对那里的人有用:)

导入要显示的视图控制器类,并使用以下代码

KartViewController *viewKart = [[KartViewController alloc]initWithNibName:@"KartViewController" bundle:nil];
[self presentViewController:viewKart animated:YES completion:nil];

斯威夫特

这将从故事板中获取一个视图控制器并显示它。

let storyboard = UIStoryboard(name: "Main", bundle: nil)
let secondViewController = storyboard.instantiateViewController(withIdentifier: "secondViewControllerId") as! SecondViewController
self.present(secondViewController, animated: true, completion: nil)

根据需要更改故事板名称、视图控制器名称和视图控制器 id。

这背后的主要逻辑是 _,

NSString * storyboardIdentifier = @"SecondStoryBoard";


UIStoryboard *storyboard = [UIStoryboard storyboardWithName:storyboardIdentifier bundle: nil];


UIViewController * UIVC = [storyboard instantiateViewControllerWithIdentifier:@"YourviewControllerIdentifer"];


[self presentViewController:UIVC animated:YES completion:nil];
        UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone_iOS7" bundle:nil];
AccountViewController * controller = [storyboard instantiateViewControllerWithIdentifier:@"accountView"];
//            [self presentViewController:controller animated:YES completion:nil];


UIViewController *topRootViewController = [UIApplication sharedApplication].keyWindow.rootViewController;
while (topRootViewController.presentedViewController)
{
topRootViewController = topRootViewController.presentedViewController;
}


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