Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何以编程方式调用视图控制器?_Ios_Objective C_Uiviewcontroller_Uistoryboard_Presentviewcontroller - Fatal编程技术网

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

Ios 如何以编程方式调用视图控制器?,ios,objective-c,uiviewcontroller,uistoryboard,presentviewcontroller,Ios,Objective C,Uiviewcontroller,Uistoryboard,Presentviewcontroller,我已经看过了所有关于这本书的教程,但仍然没有答案。我需要调用代码中的另一个视图。我正在使用UIStoryboards。我已经通过从ui按钮拖动控件多次更改了视图,但现在它必须来自代码。如果用户是第一次打开应用程序,我尝试从主菜单调用信息页面。然而,我似乎找不到从代码中更改视图的方法。所有我的视图都由相同的文件控制(ViewController2)。我的主菜单的标识符是ViewControllerMain,信息页面的标识符是ViewControllerInfo。首先,我尝试了这个: [ViewCo

我已经看过了所有关于这本书的教程,但仍然没有答案。我需要调用代码中的另一个视图。我正在使用
UIStoryboards
。我已经通过从
ui按钮拖动控件多次更改了视图,但现在它必须来自代码。如果用户是第一次打开应用程序,我尝试从主菜单调用信息页面。然而,我似乎找不到从代码中更改视图的方法。所有我的视图都由相同的文件控制(ViewController2)。我的主菜单的
标识符
ViewControllerMain,信息页面的
标识符
ViewControllerInfo。首先,我尝试了这个:

[ViewControllerMain presentViewController: ViewControllerInfo 
                                 animated:YES 
                               completion: NULL];
然后我试着为每个人制作不同的
UIViewControllers
,并说:

[ViewController2 presentViewController: ViewController 
                              animated:YES 
                            completion: NULL];
两者都不起作用。对于第一个,它说:

使用未声明的标识符ViewControllerMain

在第二条中,它说:

意外的接口名称“ViewController”:应为标识符


我能做什么?

要创建视图控制器:

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

视图控制器的标识符
等于视图控制器的类名,或者等于可以在情节提要的标识检查器中指定的情节提要ID。

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

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

本例假设您有一个导航控制器,以便返回到上一个视图。当然,您也可以使用presentViewController:animated:completion:。要点是让故事板使用目标视图控制器的ID实例化目标视图控制器。

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

1、在故事板中创建一个到ViewController的序列,如我在此处的回答所述:


2、给出您的ViewController和标识符,并使用我在这里的回答中的代码调用它:

如果您想使用NavigationController,可以通过这种方式调用ViewController

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

VerifyExpViewController *addProjectViewController = [[VerifyExpViewController alloc] init];
[self.navigationController pushViewController:addProjectViewController animated:YES];
加载视图中的2.1:在.h文件中添加以下内容

@interface VerifyExpViewController : UIViewController <UINavigationControllerDelegate>
  @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];

如何创建控制器?我在MainStoryboard.storyboard文件hi@190290000卢布人中创建了它们。这是可行的,但我想从情节提要文件中显示一个已经创建的视图。这只是给了我一个空白视图。有办法做到这一点吗?我正在尽力。我肯定有很多东西要学。@Johnfarkson:没问题!比如说,如果行代码UIViewController*vc=[storyboard InstanceeviewController的标识符:@“您的VIEWCONTROLLER的标识符”];执行多次,然后每次创建新的*vc对象?那么早期的*vc对象呢?这是内存泄漏吗?@AvijitNagare-Nah-man,多亏了ARC(假设您正在使用它),引用将自动释放,所以您不必担心它。如果你说要创建多个同名变量,这将导致编译器错误,因此它甚至不允许你这样做。好的。表示UIViewController*vc=[storyboard InstanceDeviceController WithiIdentifier:@“您的‌​_视图控制器“];每次都创建新变量。但是ARC管理它的记忆。这个问题已经有3年了,有一个公认的答案,如果你有一个有价值的贡献,请解释它,而不仅仅是发布代码。如果我在storeyboard中没有任何视图控制器,但我正在创建一个编程类,那么我如何以编程方式创建一个视图控制器,并为其分配一个类和演示it@iOSDeveloper,我不知道。如果我在storeyboard中没有任何视图控制器,但我正在创建一个可编程类,我如何可以通过编程创建一个视图控制器,并为其分配一个类,然后演示它呢?如果我在storeyboard中没有任何视图控制器,但我正在创建一个可编程类,我如何创建视图控制器上面的代码不需要任何故事板,它将与xibs一起工作。如果我既没有故事板,也没有xibs,那怎么办
        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];