53

我已經看過了我能找到的所有教程,但我仍然沒有答案。我需要從代碼中調用另一個視圖。我正在使用UIStoryboards。我已經通過控制 - 從UIButtons多次改變了視圖,但現在它必須來自代碼。我試圖從主菜單調用信息頁面,如果這是用戶第一次打開應用程序。但是,我似乎無法找到改變代碼視圖的方法。我的所有視圖都由相同的文件控制(ViewController2)。我的主菜單中的identifierViewControllerMain,信息頁面的identifierViewControllerInfo。首先,我想這:如何以編程方式調用View Controller?

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

然後我試圖使每個不同UIViewControllers並說:

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

但是都沒有成功。對於第一個,它說:

使用未聲明的標識符ViewControllerMain。

在第二個,它說:

意外接口名稱 '視圖控制器':期望標識符。

我該怎麼辦?

+0

如何創建控制器? – 2013-04-21 18:15:16

+0

我在MainStoryboard.storyboard文件中創建了它們 – 2013-04-21 19:47:58

回答

119

要創建視圖控制器:

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或者是等於你的視圖控制器,或一個故事板ID的類名,你可以在身份分配你的故事板的檢查員。

+2

Hi @ 190290000 Ruble Man。這有效,但我想顯示故事板文件中已經創建的視圖。這只是給我一個空白的看法。有沒有辦法做到這一點?我正竭盡全力。我絕對有很多東西要學。 – 2013-04-21 19:53:28

+2

謝謝@ 190290000盧布人!你最近的編輯工作! – 2013-04-22 00:35:12

+0

@JohnFarkerson:沒問題! – 2013-04-22 00:45:28

19

您需要實例從故事板視圖控制器,然後顯示它:

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

這個例子假設你爲了返回到先前的觀點有一個導航控制器。你當然也可以使用presentViewController:animated:completion :.重點是讓你的故事板使用目標視圖控制器的ID實例化你的目標視圖控制器。

4

可以調用視圖控制器這種方式,如果你想與NavigationController

enter image description here

1.In當前屏幕:加載新的屏幕

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

2.1加載視圖:在.h文件中

@interface VerifyExpViewController : UIViewController <UINavigationControllerDelegate> 

2.2添加以下裝貨查看:下面添加in .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 

希望這將是每個人都會有:)有用

0

導入要顯示和使用下面的代碼

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

斯威夫特

這從得到一個視圖控制器視圖控制器類故事板並呈現它。

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

根據需要更改故事板名稱,視圖控制器名稱和視圖控制器ID。這確保對方背後

1

主要邏輯,

NSString * storyboardIdentifier = @"SecondStoryBoard"; 

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

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

[self presentViewController:UIVC animated:YES completion:nil]; 
0
 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]; 
+3

這個問題是3歲的一個公認的答案,如果你有一個寶貴的貢獻,請解釋它,而不是隻發佈代碼。 – pancho018 2016-11-11 10:27:59

相關問題