web-dev-qa-db-fra.com

Xcode: Comment créer un contrôleur de vue PopUp qui apparaît dans un autre contrôleur de vue

Essentiellement, ce que je cherche à faire, c’est, disons, que j’ai un contrôleur de vue, appelé V1, doté d’une vue régulière et d’un bouton. Maintenant, lorsque vous appuyez sur ce bouton, je souhaite que ce bouton crée une action qui ouvre un autre contrôleur de vue, appelé V2, au sein du même contrôleur de vue, V1. 

La taille de la V2 sera réduite de manière à ne pas remplir l'écran en entier, mais vous pourrez toujours voir le premier calque qui est V1 derrière la V2. Donc, fondamentalement, vous ne quittez jamais vraiment la V1. J'espère que cela a du sens pour ce que j'essaie de faire. Je sais que l'application MTV a cette fonctionnalité. Voici une image de ce dont je parle: https://docs.google.com/leaf?id=0BzlCAVXRsIPcNWUxODM2MDAtNDE3OS00ZTc4LTk5N2MtZDA3NjFlM2IzNmZk&hl=fr

Un exemple de code ou un exemple est ce que je recherche aussi.

Merci

11
rs14smith

Vous pouvez créer une telle vue en définissant le type de propriété approprié modalPresentationStyle. Voir mon exemple ci-dessous:

UIViewController *V2 = [[UIViewController alloc] init];
V2.modalPresentationStyle = UIModalPresentationFormSheet;
V2.modalTransitionStyle = UIModalTransitionStyleCoverVertical;     
[V1 presentViewController:V2 animated:YES completion:nil];
V2.view.superview.frame = CGRectMake(0, 0, 540, 620); //it's important to do this after presentModalViewController
V2.view.superview.center = V1.view.center;
[V1 release];
24
Nekto

Essaye ça:

V2 *d = [[V2 alloc]initWithNibName:@"V2" bundle:nil];//assuming V2 is name of your nib as well
d.delegate = self; //Optional:you only need this if you want to delegate

 //create popover and put V2 in the popover view
UIPopoverController *popoverController = [[UIPopoverController alloc] initWithContentViewController:d]; 
popoverController.delegate = self;  //optional
CGSize size = CGSizeMake(325, 75); // size of view in popover…V2
popoverController.popoverContentSize = size;
[d release];
[popoverController presentPopoverFromRect:yourButton.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
6
user523234

Si vous souhaitez présenter ceci sous forme de popup modal dans iOS 8 avec un style similaire à la capture d'écran de l'OP, voici ce que j'ai fait: 

UIViewController *V2 = [[UIViewController alloc] init];  // V2 is the popup
V2.modalPresentationStyle = UIModalPresentationFormSheet;
V2.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
V2.preferredContentSize = CGSizeMake(325, 75); // size of popup view
[V1 presentModalViewController:V2 animated:YES]; // V1 is the current topmost view controller

J'aime mieux cela que d'utiliser un UIPopover parce que vous n'avez pas besoin de bousiller les directions des flèches et que l'utilisateur ne peut pas le fermer en tapotant en dehors de la popup.

Ces propriétés peuvent également être définies dans un storyboard/nib via le concepteur. Pour définir preferredContentSize, cochez la case "Utiliser la taille explicite préférée" et définissez les valeurs. 

Cela ne fonctionne que sur l'iPad.

3
Kento

Il existe une très bonne bibliothèque pour afficher un contrôleur de vue en tant que Popup sur iPhone Voir ici https://github.com/martinjuhasz/MJPopupViewController

1
Hắc Huyền Minh

file .m ---> c'est le fichier d'implémentation

-(IBAction)anyAlert:(id)sender{

   UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Title" message:@"A Message" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK!", @"Other Title", nil];
    [alert show];
    [alert release];
}

rappelez-vous déclarer 

-(IBAction)anyAlert:(id)sender; 

dans le file .h ---> fichier d'en-tête

Cela fonctionne pour moi, j'espère pour vous ...

0
Santiago Montoya

Si vous utilisez Storyboard, vous pouvez suivre cette étape:

  1. Ajoutez un contrôleur de vue (V2), configurez l'interface utilisateur comme vous le souhaitez

* basé sur l'image que vous avez jointe

  • ajouter un UIView - définir le fond sur noir et l'opacité sur 0,5
  • ajoutez un UIImageView - qui servira de fenêtre contextuelle (notez que l'image et la vue ne doivent pas avoir le même niveau/hiérarchie. Ne faites pas de la vue image l'enfant de la vue, sinon l'opacité de uiview affectera uiImageView)
  1. Present V2 Modally

  2. Cliquez sur la segue. Dans l'inspecteur Attributs, définissez la présentation comme en plein écran . Supprimer l'animation si vous aimez

Storyboard

  1. Sélectionnez V2. Dans l'inspecteur Attributs, définissez la présentation comme en plein écran . Vérifier Définit le contexte et fournit le contexte

Storyboard

  1. Sélectionnez le MainView de votre V2 (image de contrôle Pls.). Définissez backgroundColor sur Clear Color

Storyboard

0
dhin

Créez UIView pour v2 et ajoutez v1.

- (void)viewDidLoad
{
    UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    [button addTarget:self 
                   action:@selector(aMethod:)
         forControlEvents:UIControlEventTouchDown];
    [button setTitle:@"Show View" forState:UIControlStateNormal];
        button.frame = CGRectMake(80.0, 210.0, 160.0, 40.0);
    [self.view addSubview:button];
}

- (void)aMethod:(id)sender 
{
    CGRect * imageFrame = CGRectMake(10, 90, 300, 300);
    V2 *v2 = [[V2 alloc] initWithFrame:imageFrame];
    [self.view addSubview:v2];
}
0
user1499077