53

Ich habe mir alle Tutorials angesehen, die ich hier finden kann, und ich habe immer noch keine Antwort. Ich muss eine andere Ansicht aus dem Code aufrufen. Ich verwende UIStoryboards. Ich habe die Ansicht oft durch Ziehen mit der Maus von UIButtons geändert, aber jetzt muss es aus dem Code sein. Ich versuche, die Infoseite über das Hauptmenü aufzurufen, wenn der Benutzer die App zum ersten Mal geöffnet hat. Ich kann jedoch keine Möglichkeit finden, die Ansichten vom Code zu ändern. Alle meine Ansichten werden von denselben Dateien gesteuert (ViewController2). Die identifier meines Hauptmenüs ist ViewControllerMain, und die identifier der Info-Seite ist ViewControllerInfo. Zuerst habe ich versucht, dies:Wie wird ein View Controller programmgesteuert aufgerufen?

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

Dann habe ich versucht verschiedene UIViewControllers für jeden und sagen zu machen:

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

Weder gearbeitet. Für die erste sagt es:

Verwendung von nicht deklarierten Bezeichner ViewControllerMain.

Im zweiten, heißt es:

unerwartete Schnittstellennamen 'Viewcontroller': erwartete Kennung.

Was kann ich tun?

+0

Wie erstellen Sie die Controller? –

+0

Ich habe sie in der MainStoryboard.storyboard Datei –

Antwort

119

Um einen View-Controller zu erstellen:

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

einen View-Controller aufrufen (muss aus einem anderen Viewcontroller genannt werden):

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

Zum einen Null verwenden, anstatt null.


einen View-Controller aus dem Storyboard laden:

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 Ihrer View-Controller ist entweder auf den Klassennamen der View-Controller gleich oder eine Storyboard-ID, die Sie in der Identität zuweisen Inspektor Ihres Storyboards.

+2

Hi @ 190290000 Rubel Man erstellt. Das funktioniert, aber ich möchte eine bereits erstellte Ansicht aus der Storyboard-Datei zeigen. Das gibt mir nur eine leere Sicht. Gibt es eine Möglichkeit, dies zu tun? Ich gebe mein Bestes. Ich muss definitiv viel lernen. –

+2

Danke @ 190290000 Rubel Mann !! Dein letzter Schnitt hat funktioniert! –

+0

@ JohnFarkerson: Kein Problem! –

19

Sie müssen den View-Controller aus dem Storyboard instanziiert und zeigen Sie es dann:

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

Dieses Beispiel geht davon aus, dass Sie eine Navigationssteuerung, um zur vorherigen Ansicht zurückzukehren. Sie können natürlich auch presentViewController verwenden: animated: completion :. Der Hauptpunkt besteht darin, dass Ihr Storyboard den Zielansicht-Controller unter Verwendung der ID des Zielansicht-Controllers instanziiert.

4

Sie können Viewcontroller nennen diese Art und Weise, wenn Sie mit Navigation wollen

enter image description here

1.In aktuellen Bildschirm: Legen Sie einen neuen Bildschirm

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

2,1 In Loaded Ansicht: Fügen Sie unten in .h-Datei

@interface VerifyExpViewController : UIViewController <UINavigationControllerDelegate> 

2,2 In Loaded Ansicht: add unten in .m Datei

@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 

Hope this es für jemanden nützlich sein wird :)

0

Import der View-Controller-Klasse, die Sie den folgenden Code

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

Swift

Dieser bekommt einen View-Controller aus dem zeigen, und verwenden möchten Storyboard und präsentiert es.

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

Ändern Sie den Namen Storyboard, View-Controller-Namen und View-Controller-ID als angemessen.

1

Haupt Logik hinter diesem is_,

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

die Frage ist 3 Jahre alt mit einer akzeptierten Antwort, wenn Sie einen wertvollen Beitrag haben, erklären Sie es bitte, anstatt nur Code zu buchen. – pancho018

Verwandte Themen