web-dev-qa-db-fra.com

iOS: Vue modale avec fond transparent?

Je veux montrer un modalview sur un viewController. (qui a un contrôleur de naviguation).

De mon point de vue, j'ai du texte et un bouton pour afficher le modalview. 

J'ai créé un fichier .xib qui contenait mon modalview (c'est une vue avec une image et une étiquette).

Quand je le montre, avec ça:

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];

j'ai mon modalview, MAIS, le fond devient noir .. et je veux voir toujours le texte sur ma vue. (J'ai essayé de définir alpha, etc.; mais RIEN ne se lance: '()

Quelqu'un pour m'aider?

Merci,

30
deveLost

vous pouvez consulter l'exemple iOS7 (voir ma communication) ou simplement essayer ceci:

supprime cette ligne de votre méthode de "présentation"

controller.view.backgroundColor = [UIColor clearColor];

maintenant, dans viewDidLoad de la ShareController, ajoutez:

 self.view.backgroundColor = [UIColor clearColor];
 self.modalPresentationStyle = UIModalPresentationCurrentContext;
 self.modalPresentationStyle = UIModalPresentationFormSheet;

PS

si vous avez un navigateurContrôleur ... utilisez 

[self.navigationController presentViewController:controller animated:YES completion:nil];
23
TonyMkenu

Utilisez l'extrait suivant pour le faire sur iOS 8 et les versions suivantes:

Pour l'objectif C:

UIViewController *walkThru = [self.storyboard   instantiateViewControllerWithIdentifier:@"WalkThroughScene"];
walkThru.providesPresentationContextTransitionStyle = YES;
walkThru.definesPresentationContext = YES;
[walkThru setModalPresentationStyle:UIModalPresentationOverCurrentContext];
[self.navigationController presentViewController:walkThru animated:YES completion:nil];

Pour 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)

Et la couleur de fond de votre viewController présenté doit être clearColor.

104
pankaj

Si vous voulez que votre modalVC soit au-dessus de la barre d’onglet, vous devez définir le style de présentation en tant que UIModalPresentationOverFullScreen

[_presentedViewController setModalPresentationStyle:UIModalPresentationOverFullScreen];

[_presentingViewController presentViewController:_presentedViewController animated:YES completion:nil];
3
dorian

Dans PresentingViewController, copiez le code ci-dessous sous storyboard segue ou 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];

Dans la seconde ViewController, procédez comme suit soit par storyboard, soit par le code:

  1. Définissez la couleur d'arrière-plan de la vue (self.view) sur clearcolor et réduisez l'opacité à 50%.
  2. Vous pouvez maintenant réaliser une vue modale semi-transparente
2
vigneshwaran s

La réponse rapide est que vous ne pouvez pas présenter une vue modale transparente, pas avec la méthode presentViewController: animated: completion: Parce que vous ne pouvez pas rendre le contrôleur de vue modal transparent (votre vue est un placer en plus de cela).

Vous pouvez créer une vue personnalisée et l'animer manuellement. C'est un moyen de créer quelque chose dont vous avez besoin. 

2
Greg

C'est la couleur UIWindow's, vous pouvez initialiser la couleur UIWindow dans appDelegate.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    self.window.backgroundColor = [UIColor whiteColor];
    return YES;
}
0
N.nnd