Voglio mostrare un pannello di avvisi personalizzato sulla mia app, ma avere il precedente UIViewController visibile sullo sfondo. Speravo di mostrarlo come controller di visualizzazione modale. Come faccio a fare questo senza che il precedente UIViewController diventi nero e scompaia?Come sovrapporre un modalViewController a un'altra vista senza che l'originale scompaia?
risposta
Invece di mostrare il nuovo vc come vc modale, è necessario aggiungerlo come controller di vista del bambino:
AlertPanelVC *alertVC = ...
[self addChildViewController: alertVC];
alertVC.view.frame = ...; //or something equivalent if you're using auto layout
[self.view addSubview: alertVC.view];
[alertVC didMoveToParentViewController: self];
di respingerlo:
[alertVC willMoveToParentViewController:nil];
[alertVC.view removeFromSuperview];
[alertVC removeFromParentViewController];
Ecco quello che ho usato:
MyCustomAlertViewController *myCustomAlertViewController = [[MyCustomAlertViewController alloc]initWithNibName:@"MyCustomAlertViewController" bundle:nil];
myCustomAlertViewController.delegate = self; //optional if you have delegate setup
[myCustomAlertViewController setModalPresentationStyle:UIModalPresentationPageSheet];
[myCustomAlertViewController setModalTransitionStyle:UIModalTransitionStyleFlipHorizontal];
[self presentViewController:myCustomAlertViewController animated:YES completion:^{
//do stuff after the view is displayed.
}];
myCustomAlertViewController.view.superview.autoresizingMask = UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin;
myCustomAlertViewController.view.superview.frame = CGRectMake(calculatedCenterX, CalculatedCenterY, myCustomAlertViewControllerWidth, myCustomAlertViewControllerHeight);
//calculatedCenterX = (1024 - myCustomAlertViewControllerWidth)/2; //for example
//calculatedCenterY = (768 - myCustomAlertViewControllerHeight)/2;
c'è un componente cool blurred per quello. certo, solo una questione di gusti. :)
Quando si presenta un controller di visualizzazione utilizzando lo stile UIModalPresentationFullScreen, UIKit normalmente rimuove le viste del controller di visualizzazione sottostante dopo la fine delle animazioni di transizione. È possibile impedire la rimozione di tali viste specificando invece lo stile UIModalPresentationOverFullScreen. È possibile utilizzare questo stile quando il controller della vista presentato dispone di aree trasparenti che consentono di mostrare il contenuto sottostante.
Quindi, in pratica un'istanza per il viewcontroller, specificare lo stile presenation modale e poi presentare il controller della vista.
Se si desidera avere uno sfondo (semi) trasparente, è sufficiente regolare il colore della vista principale del controller della vista.
- 1. Come garantire che un NotifyIcon scompaia?
- 2. Come sovrapporre un Jbutton a una JprogressBar
- 3. Come posso sovrapporre un SKScene a un SCNScene in Swift?
- 4. Come sovrapporre viste
- 5. Come mostrare modalviewcontroller sopra la tabbar
- 6. Come sovrapporre la vista sulla barra del controller di navigazione?
- 7. Puoi sovrapporre un div trasparente a un'immagine
- 8. Come posso sovrapporre un testo a un altro usando CSS?
- 9. Come sovrapporre due geom_bar?
- 10. Ignora modalviewcontroller con una pagina arricciata
- 11. vista backbonejs senza un modello
- 12. Come posso presentare un ModalViewController da un oggetto UIActivity scelto da UIActivity View Controller?
- 13. Come forzare un aggiornamento della vista senza che si attivi automaticamente da un osservabile?
- 14. iOS Swift: come sovrapporre due immagini che ingrandire allo stesso tempo senza perdere le coordinate di sovrapposizione dell'immagine
- 15. Come posso sovrapporre un'ombra esterna a una ScrollView?
- 16. Puoi sovrapporre un gradiente css3 trasparente a un'immagine di sfondo?
- 17. Come impedire che la legenda scompaia durante un'animazione di Google Charts?
- 18. Come sovrapporre, ridimensionare e centrare un componente su un JPanel?
- 19. AVCaptureSession in modalviewcontroller su iOS5 con ARC
- 20. Chiamare viewwillappear dopo aver eliminato modalviewcontroller
- 21. Come sovrapporre un'immagine o una vista sopra un'immagine catturata dalla telecamera
- 22. R: Come sovrapporre i grafici a torta su "punti" in un grafico a dispersione in R
- 23. Aggiornamento padre ViewController dopo aver eliminato ModalViewController
- 24. Come posso sovrapporre un numero sopra un glifo FontAwesome?
- 25. Rails mailer senza vista
- 26. Sovrapporre una tela su un div
- 27. Come posso sovrapporre un file audio a un altro e salvarlo?
- 28. Come sovrapporre una linea per un oggetto lm su un grafico a dispersione ggplot2
- 29. Come sovrapporre le immagini in nativa reattiva
- 30. Come capovolgere un singolo UIView (senza capovolgere la vista genitore)
Ottima risposta. Vorrei aggiungere due modifiche. (1) Invece di aggiungere e rimuovere la sottoview, è possibile animare. (2) Stai per voler bloccare l'interazione dell'utente con la parte esterna dello schermo visibile sullo sfondo. Per fare ciò, rendere la vista del nuovo controller di visualizzazione delle stesse dimensioni dello schermo, con uno sfondo chiaro in cui l'interazione dell'utente è disabilitata. L'utente non può vederlo (è chiaro) ma blocca i tocchi dal cadere attraverso. La tua nuova interfaccia è quindi una sottoview in cima a * that *. – matt
concordato. Personalmente mi piace usare una "vista di sfondo" nera con un valore alfa di 0,5-0,8. Questo crea l'effetto che lo sfondo si scurisce quando viene visualizzata la "sovrapposizione". Ma questa è solo una preferenza personale. :) – Tobi
Ho appena provato ad aggiungere 'nil' come fromViewController ... ha ottenuto un errore" 'I bambini visualizzano i controller (null) e devono avere un controller di visualizzazione padre comune quando chiamano - [UIViewController transitionFromViewController: ...' ", quindi non penso che funzionerà. –
denikov