2013-10-26 5 views
12

La mia app può eseguire l'autorotazione, ma ho bisogno che una delle viste venga visualizzata solo in modalità verticale e non so come ottenerla. Ho provato questo (tra l'altro), ma la vista in questione continua a girare:Impedire l'autorotazione per un controller di visualizzazione ios7?

-(BOOL)shouldAutorotate 
{    
    return NO; 
} 

- (NSUInteger)supportedInterfaceOrientations 
{ 
    return UIInterfaceOrientationMaskPortrait; 
} 

risposta

6

supportedInterfaceOrientations funzionerà se si presenta il controller vista come un controller di vista modale. Non funzionerà se lo si presenta come parte di uno stack di controller di navigazione. Se vuoi che la tua vista sia presentata in modo modale ma all'interno di un controller di navigazione (ad esempio, per avere elementi di navigazione) la soluzione che ho fatto è stata la sottoclasse di UINavigationController e l'override dei metodi supportedInterfaceOrientations nella mia sottoclasse.

+0

Sarebbe possibile aggiungere del codice che mostri la soluzione? – rkh

+0

@rkh Hai bisogno del codice per creare una sottoclasse che sovrascriva una funzione? –

+0

No, volevo solo spiegare la tua soluzione a Victor "in codice" dato che sembra un nuovo utente ... Io sono buono :) – rkh

15

Questa soluzione spiega come controllare l'orientamento sui singoli controller di vista, a condizione che siano gestiti da un controller di navigazione.

In Xcode 5, creare un nuovo file di tipo "Categoria Objective-C", impostarlo su "Category" su "rotation" e scegliere "UINavigationController" come "Category on".

Una nuova coppia di file apparirà nel progetto, aventi le seguenti nomi: UINavigationController + rotation.h UINavigationController + rotation.m

Nel file .m, scrivere il codice seguente:

- (BOOL) shouldAutorotate 
{ 
    return [[self topViewController] shouldAutorotate]; 
} 

- (NSUInteger) supportedInterfaceOrientations 
{ 
    return [[self topViewController] supportedInterfaceOrientations]; 
} 

In questo modo, il controller di navigazione consentirà al controller di vista superiore corrente di determinare la politica di orientamento.

Quindi, in ciascun controller di visualizzazione specifico gestito dal controller di navigazione, è possibile ignorare i due metodi relativi all'orientamento.

Per esempio, se un determinato controller di vista deve apparire solo in orientamento verticale:

- (BOOL) shouldAutorotate 
{    
    return NO; 
} 

- (NSUInteger) supportedInterfaceOrientations 
{ 
    return UIInterfaceOrientationMaskPortrait; 
} 

Assicurarsi che l'orientamento desiderato è uno di quelli impostato nelle informazioni distribuzione del progetto. Spero che questo sia sufficientemente dettagliato e possa essere d'aiuto.

+0

Funziona perfettamente - grazie! – wayneh

+0

Ottima risposta, è davvero un bel lavoro! – EridB