2010-03-21 18 views
6

ecco il mio codice:presentModalViewController non funziona

ViewController *vc = [[ViewController alloc] initWithNibName:@"TableView" bundle:nil]; 
[self.navigationController presentModalViewController:vc animated:YES]; 
//[self setView:[vc view]]; 

Se lo chiamo io, non succede nulla. Tuttavia, se cambio a:

ViewController *vc = [[ViewController alloc] initWithNibName:@"TableView" bundle:nil]; 
//[self.navigationController presentModalViewController:vc animated:YES]; 
[self setView:[vc view]]; 

La vista appare più che bene (senza la transizione, ovviamente). Cosa sto sbagliando? C'è qualcosa di speciale di cui occuparsi durante l'inizializzazione del controller di visualizzazione? Ho provato a copiare il più possibile dagli esempi di Apple, ma non riesco a farlo funzionare ...

Grazie per qualsiasi input!

- Ry

risposta

24

È possibile solo presenti vista modale controller da controllori che sono già state mostrate su schermo (di solito attraverso un UINavigationController o UITabBarController). Prova a creare un UINavigationController, spingendo un viewController ad esso, e quindi presentando il tuo controller modale. C'è un progetto iniziale in Xcode che mostra come creare un flusso basato su UINavigationController se non lo conosci.

Un'altra cosa da notare: se non è stato premuto il controller della vista su un UINavigationController, la proprietà .navigationController sarà nulla, e la messaggistica non avrà alcun effetto.

+0

Meh. Non c'è un modo più semplice per farlo? Non voglio davvero creare un UINavigationController solo per poter far scorrere una vista ... Grazie per la tua risposta, però! – ryyst

+0

Non devi creare un controller nav per farlo, ma stai facendo riferimento qui. Se hai solo un controller di visualizzazione, puoi semplicemente utilizzare l'IT per presentare un controller di visualizzazione modale (ad esempio, eliminare ".navigationController" se il tuo esempio di codice sopra. Dovrai aggiungere la vista viewController alla finestra principale per fare in modo che lavoro –

+4

+1 mi ha salvato la vita adesso:: –

1

Ho riscontrato lo stesso problema durante il tentativo di mostrare una vista modale su un'altra vista modale. La risposta di Ben è corretta, e può essere implementata in questo modo:

@interface FirstView: UIViewController { 

    UIViewController *firstView; 
} 

- (IBAction)showOptionsView:(id)sender; 

@end 

Nella classe di visualizzazione principale:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    firstView = [[UIViewController alloc]init]; 
    [firstView setView:self.view]; 
    [firstView setModalTransitionStyle:UIModalTransitionStyleCoverVertical]; 
} 

- (IBAction)showOptionsView:(id)sender { 
    OptionsView *optView = [[OptionsView alloc]initWithNibName:@"OptionsView" bundle:nil]; 

    if(firstView != nil) { 
     [firstView presentModalViewController:optView animated:YES]; 
     [optView release]; 
} 
Problemi correlati