53

Ho visto tutti i tutorial che riesco a trovare su questo, e ancora non ho la risposta. Devo chiamare un'altra vista dal codice. Sto usando UIStoryboards. Ho cambiato la vista più volte trascinando il controllo da UIButtons, ma ora deve essere dal codice. Sto cercando di chiamare la pagina delle informazioni dal menu principale se è la prima volta che l'utente ha aperto l'app. Tuttavia, non riesco a trovare un modo per modificare le viste dal codice. Tutte le mie visualizzazioni sono controllate dagli stessi file (ViewController2). Il identifier del mio menu principale è ViewControllerMain e identifier della pagina di informazioni è ViewControllerInfo. Per prima cosa ho provato questo:Come chiamare un controller di visualizzazione a livello di codice?

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

Poi ho provato a fare diversi UIViewControllers per ogni e dicendo:

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

Né funzionato. Per il primo, si dice:

Utilizzo dell'identificatore non dichiarato ViewControllerMain.

Nel secondo, si dice:

nome dell'interfaccia inaspettato 'ViewController': identificatore previsto.

Cosa posso fare?

+0

Come si fa a creare i controllori? –

+0

Li ho creati nel file MainStoryboard.storyboard –

risposta

119

Per creare un controller di vista:

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

Per chiamare un controller della vista (deve essere richiamato da un altro viewcontroller):

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

Per uno, usa nil anziché nullo.


Caricamento di un controller della vista dallo storyboard:

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 del vostro controller della vista è o uguale al nome della classe del controller della vista, o un ID Storyboard che è possibile assegnare nell'identità ispettore del tuo storyboard.

+2

Ciao @ 190290000 Ruble Man. Funziona, ma mi piacerebbe mostrare una vista già creata dal file storyboard. Questo mi dà solo una visione vuota. C'è un modo per fare questo? Sto facendo del mio meglio. Ho davvero molto da imparare. –

+2

Grazie @ 190290000 Ruble Man !! La tua modifica recente ha funzionato! –

+0

@JohnFarkerson: Nessun problema! –

19

È necessario istanziare il controller della vista dallo storyboard e poi vederlo:

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

Questo esempio presuppone che si dispone di un controller di navigazione per tornare alla vista precedente. Ovviamente puoi anche usare presentViewController: animated: completion :. Il punto principale è far sì che lo storyboard istanzia il controller della vista target utilizzando l'ID del controller della vista di destinazione.

4

È possibile chiamare ViewController in questo modo, se si vuole con navigationController

enter image description here

1.In schermata corrente: Caricare il nuovo schermo

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

2,1 In Loaded Vista: aggiungere di seguito in file h

@interface VerifyExpViewController : UIViewController <UINavigationControllerDelegate> 

2,2 In Loaded Vista: aggiungi qui sotto in .m file

@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 

Spero che questo sarà utile per qualcuno :)

0

Importare la classe di visualizzazione del controller che si desidera visualizzare e utilizzare il seguente codice

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

Swift

Questo diventa un controller vista dalla storyboard e lo presenta.

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

Cambiare il nome storyboard, vista nome del controller, e vista del regolatore id a seconda dei casi.

1

logica principale alla base di questo 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

la domanda è di 3 anni con una risposta accettata, se si dispone di un contributo valido, si prega di spiegarlo piuttosto che semplicemente postare il codice. – pancho018

Problemi correlati