10

Sto cercando di modale presentare un controller della vista come di seguito:UIModalPresentationCurrentContext with Transition?

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"addPopover"]; 
vc.view.backgroundColor = [UIColor clearColor]; 
self.modalPresentationStyle = UIModalPresentationCurrentContext; 
[self presentModalViewController:vc animated:YES]; 

Ora utilizzando UIModalPresentationCurrentContext significa che posso presentare questo punto di vista con uno sfondo trasparente e vedere la mia altra vista dietro quella nuova. Tuttavia, mi impedisce di essere in grado di presentarlo con una transizione.

Qualche idea, perché? O come posso aggirare questo? Grazie.

+0

Qual è lo stile di presentazione del ViewController da cui si presenta? – brynbodayle

+0

@bbodayle, sto riscontrando lo stesso problema e ho provato tutti gli stili/combinazioni di presentazione su entrambi i ViewControllers. –

risposta

11

Le modalizzazioni a schermo intero non dovrebbero consentire di vedere il livello inferiore. Fastidioso lo so.

Dal tuo codice presumo che "addPopover" sia in realtà una visualizzazione a schermo intero, in cui hai il contenuto come sottosezione mentre il resto è trasparente.

Prova questa:

vc.modalPresentationStyle = UIModalPresentationCurrentContext; 
vc.modalTransitionStyle = UIModalTransitionStyleCoverVertical; 
[self presentViewController:vc animated:YES completion:NULL]; 

Nota: Mi consiglia di aggiungere un colore di sfondo a bassa alpha per permettere all'utente di sapere che non possono interagire con il resto della vista quando si pop questo sopra la parte superiore. ..

+1

Cosa c'è di diverso qui? L'impostazione modalTransitionStyle nella vista di destinazione non ha fatto alcuna differenza e nemmeno ha usato presentViewController su presentModalViewController. –

+0

assegnando lo stile di transizione a 'vc' invece di' self' e usando il metodo 'presentViewController'. Senza vedere il tuo storyboard è difficile diagnosticare se questo non funziona. Con il metodo sopra riportato, il VC sovrapposto deve avere le stesse dimensioni di "self" (o essere in grado di ridimensionare) –

+2

Sì, nel mio progetto entrambi i ViewControllers hanno la stessa dimensione. Ho provato il tuo codice e non ci sono stati cambiamenti. L'impostazione della proprietà 'modalPresentationStyle = UIModalPresentationCurrentContext' deve essere applicata a se stessi qui, non vc. Credo che dovrò iniziare la mia domanda invece di offrire ricompensa su questo perché non c'è una soluzione qui, anche se è contrassegnata come una sola. –

25

Sono stato in grado di farlo impostando modalPresentationStyle = UIModalPresentationCurrentContext sul rootViewController della mia UIWindow, SE non ho presentato alcun nuovo viewController a schermo intero su questo rootViewController. Ho fatto qualcosa di simile:

UIViewController *rootViewController = [UIApplication sharedApplication].delegate.window.rootViewController; 
rootViewController.modalPresentationStyle = UIModalPresentationCurrentContext; 
[self presentViewController:vc animated:YES completion:nil]; 

Ho provato questo sia un UINavigationController come RootViewController della mia finestra e vari altri controllori visualizzazione personalizzata. Sembra che finchè il rootViewController della finestra sappia cosa sta succedendo, qualsiasi sub-viewControllers può chiamare presentViewController:animated:completion: senza oscurare la vista sottostante.

Tuttavia, supponiamo che tu presenti un'altra viewController sulla parte superiore della finestra rootViewController. E questa nuova viewController viene presentata con modalPresentationStyle = UIModalPresentationFullScreen (ad esempio occupa lo schermo), quindi è necessario chiamare modalPresentationStyle = UIModalPresentationCurrentContext sul viewController più in alto.

Quindi, per ricapitolare:

  • Se hai UINavigationController -> UIViewController (s) (potrebbero essere spinti e spuntato dentro e fuori), poi si impostare modalPresentationStyle = UIModalPresentationCurrentContext sul UINavigationController.
  • Se si dispone di UINavigationController -> UIViewController -> new-UIViewController (con modalPresentationStyle impostato su UIModalPresentationFullScreen), quindi si imposta modalPresentationStyle = UIModalPresentationCurrentContext sul nuovo UIViewController.

Speriamo che questo funzioni anche per voi ragazzi! suggerimenti

+1

Questo ha funzionato per me. La chiave stava impostando modalPresentationStyle sul controller della vista di presentazione, non sulla presentazione del controller della vista. –

+0

Cosa succede se lo si presenta su un UISplitViewController? –

+0

Grazie per questo! –

0

Mr. T hanno lavorato quasi perfettamente, semplicemente perdere l'animazione di transizione sulle viewcontroller

Dal momento che è anche l'impostazione stile di presentazione del appDelegates RootViewController, sarà anche rimuovere le animazioni di transizione presentato per eventuali opinioni presentate da quella punto.

La mia difficoltà è stato quello di tornare stile di presentazione del AppDelegates RootViewController nuovo esso è predefinito ogni volta che il viewcontroller sia chiuso che avevo bisogno lo sfondo trasparente su

ho un pulsante che respinge l'presentedViewController, nel senso che ho anche impostare la presentazione stile del rootViewController torna al valore predefinito utilizzando:

UIViewController *rootViewController = [[[[UIApplication sharedApplication] delegate] window] rootViewController]; 
    rootViewController.modalPresentationStyle = UIModalPresentationFullScreen; 

Spero che questo aiuti qualcun altro a rimanere incerto su questo problema.

Problemi correlati