ios - swift 4 present modally
iOS: ModalView con fondo transparente? (6)
En el PresentingViewController
copie el siguiente código debajo de storyboard segue o IBAction.
SecondViewController *viewController = [self.storyboard instantiateViewControllerWithIdentifier:@"secondViewController"];
//SecondViewController *viewController = [SecondViewController alloc]init]; // if you are adding the viewcontroller programatically
viewController.modalPresentationStyle = UIModalPresentationOverCurrentContext;
[viewController setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
[self presentViewController:viewController animated:YES completion:nil];
En el segundo ViewController
realice los siguientes pasos mediante el guión gráfico o mediante el código:
- Establezca el
self.view
fondo de la vista (self.view
) en clearcolor y reduzca la opacidad al 50% - Ahora puedes realizar una vista modal semitransparente.
Quiero mostrar una vista modal en un viewController. (que tiene un controlador de navegación).
En mi opinión, tengo texto y un botón para mostrar la vista modal.
Creé un .xib que contenía mi vista modal (es una vista con una imagen y una etiqueta).
Cuando lo muestro, con eso:
ShareController *controller = [[ShareController alloc] initWithNibName:@"ShareController" bundle: nil];
controller.view.backgroundColor = [UIColor clearColor];
controller.modalPresentationStyle = UIModalPresentationFormSheet;
controller.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
[self presentViewController:controller animated:YES completion:nil];
Tengo mi vista modal, PERO, el fondo se vuelve negro ... y quiero ver siempre el texto en mi vista. (Intenté configurar alfa, etc.; pero NOTHING se ejecuta: ''()
¿Alguien que me ayude?
Gracias,
Ese es el color UIWindow''s
, puede UIWindow
color de UIWindow
en appDelegate.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
self.window.backgroundColor = [UIColor whiteColor];
return YES;
}
La respuesta rápida es que no puede presentar una vista modal transparente, no con presentViewController: animated: completed: method. Porque no puede hacer que el controlador de vista modal sea transparente (su vista es mucho más que eso).
Puedes crear una vista personalizada y animarla manualmente, esta es una forma de crear algo que necesitas.
Puedes consultar el ejemplo de iOS7 (ver mi comunic.) o simplemente puedes probar esto:
eliminar esta línea de su método de "presentación"
controller.view.backgroundColor = [UIColor clearColor];
ahora, en viewDidLoad del ShareController
agregar:
self.view.backgroundColor = [UIColor clearColor];
self.modalPresentationStyle = UIModalPresentationCurrentContext;
self.modalPresentationStyle = UIModalPresentationFormSheet;
PD
Si tienes un navigationController ... usa
[self.navigationController presentViewController:controller animated:YES completion:nil];
Si desea que su modalVC esté sobre la barra de pestañas, debe definir el estilo de presentación como UIModalPresentationOverFullScreen
[_presentedViewController setModalPresentationStyle:UIModalPresentationOverFullScreen];
[_presentingViewController presentViewController:_presentedViewController animated:YES completion:nil];
Use el siguiente fragmento de código para hacerlo en iOS 8 en adelante:
Para el Objetivo C:
UIViewController *walkThru = [self.storyboard instantiateViewControllerWithIdentifier:@"WalkThroughScene"];
walkThru.providesPresentationContextTransitionStyle = YES;
walkThru.definesPresentationContext = YES;
[walkThru setModalPresentationStyle:UIModalPresentationOverCurrentContext];
[self.navigationController presentViewController:walkThru animated:YES completion:nil];
Para Swift:
let viewController : XYZViewController = self.storyboard!.instantiateViewControllerWithIdentifier(“XYZIdentifier”) as! XYZViewController
viewController.providesPresentationContextTransitionStyle = true
viewController.definesPresentationContext = true
viewController.modalPresentationStyle=UIModalPresentationStyle.OverCurrentContext
self.presentViewController(viewController, animated: true, completion: nil)
Y el color de fondo de su viewController presentado debe ser clearColor.