如何以编程方式调用视图控制器?如何以编程方式调用视图控制器?(How to call a View

2019-05-13 01:36发布

我已经看过了所有的教程我能找到的就这一个,我还没有答案。 我需要调用从代码另一种观点。 我使用UIStoryboards 。 我已经控制拖动从改变视图多次UIButtons ,但现在它必须从代码。 我试图从主菜单中调用信息页面,如果它是第一次用户打开应用程序。 我似乎无法找到一种方法来改变从代码的意见,但是。 我所有的观点得到相同的文件(ViewController2)控制。 该identifier我的主菜单是ViewControllerMainidentifier的信息页面的是ViewControllerInfo。 首先,我想这:

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

然后我试图使不同UIViewControllers每个并说:

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

但是都没有成功。 对于第一个,它说:

使用未声明的标识符ViewControllerMain的。

在第二个,它说:

意想不到的接口名称“视图控制器”:期望标识符。

我能做什么?

Answer 1:

要创建视图控制器:

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

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

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

其一,用零而不是零。


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

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您的视图控制器或者是等于你的视图控制器,或者,你可以在你的故事板的身份检查分配一个Storyboard ID的类名。



Answer 2:

您需要实例从故事板视图控制器,然后显示它:

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

这个例子假设你为了返回到先前的观点有一个导航控制器。 当然,你可以也使用presentViewController:动画:完成:. 最主要的一点是让你的故事板使用目标视图控制器的ID实例化目标视图控制器。



Answer 3:

迅速

这从故事板得到一个视图控制器,并提出它。

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

更改故事板名称,查看控制器的名称,并查看控制器ID为合适。



Answer 4:

您可以拨打视图控制器这种方式,如果你想与NavigationController

1.In当前屏幕:加载新的屏幕

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

希望这将是每个人都会有有用:)



Answer 5:

有2种方式,你可以这样做:

1,创建一个原因请看在你的故事板您的ViewController如在这里我的答案解释: 如何执行是不相关的用户输入的iOS 5 SEGUE?

2,给你的ViewController和标识,并在我的答案使用代码在这里称之为: 编程调用故事板的场景(无需SEGUE)?



Answer 6:

此,确保对方落后的主要逻辑,

NSString * storyboardIdentifier = @"SecondStoryBoard";

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

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

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


Answer 7:

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

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


Answer 8:

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


文章来源: How to call a View Controller programmatically?