2011-09-14 2 views
10

Fondamentalement, ce que j'essaie de comprendre est, disons que j'ai un View Controller, appelé V1, qui a une vue régulière à l'intérieur et un bouton . Maintenant, lorsque vous appuyez sur ce bouton, je veux que ce bouton crée une action qui affiche un autre View Controller, appelé V2, dans le même contrôleur de vue, V1.Xcode: Comment créer un contrôleur de vue contextuelle qui apparaît dans un autre contrôleur de vue

La taille de V2 sera réduite pour ne pas remplir tout l'écran, mais vous pouvez toujours voir la première couche qui est V1 derrière V2. Donc, fondamentalement, vous ne quittez jamais vraiment 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é. Une image de ce que je parle est ici: https://docs.google.com/leaf?id=0BzlCAVXRsIPcNWUxODM2MDAtNDE3OS00ZTc4LTk5N2MtZDA3NjFlM2IzNmZk&hl=en_US

Exemple de code ou un exemple est ce que je cherche aussi bien.

Merci

Répondre

24

Vous pouvez créer ce point de vue en définissant le type de propriété appropriée de 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]; 
+0

Je reçois un écran noir en blanc. Cela ne fonctionnera-t-il pas sur iPhone? –

+0

@ChaseRoberts cela ne fonctionnera que sur iPad. Sur iPhone, il suffit de définir les propriétés 'modalPresentationStyle' et' modalTransitionStyle' et de ne pas modifier d'autres valeurs. – Nekto

+0

Quel est le code pour iPhone? – Peter

6

Essayez ceci:

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

J'ai eu le même problème, quand j'ai essayé ce code, il a jeté une exception - "[UIPopoverController initWithContentViewController:] appelé quand il n'est pas exécuté sous UIUserInterfaceIdiomPad." – stanley

+0

Ce code ne fonctionne qu'avec l'iPad et non avec l'iPhone car dans l'iPhone il n'y a pas de classe appelée 'UIPopoverController' –

0

file .m ---> c'est le fichier de mise en œuvre

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

se rappeler déclarer

-(IBAction)anyAlert:(id)sender; 

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

Il fonctionne pour moi, je l'espère pour vous ...

+0

Cela a été abandonné et je ne recommanderais pas d'utiliser une alerte comme un substitut pour modal. – Tommyixi

0

Créer UIView pour v2 et ajouter à 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]; 
} 
1

Il y a une très bonne bibliothèque pour afficher un contrôleur d'affichage comme Popup sur iPhone voir ici https://github.com/martinjuhasz/MJPopupViewController

+0

Des trucs géniaux. Utilisation très pratique aussi. Je cherchais quelque chose exactement comme ça.merci pour le lien –

+0

Désolé, ne fonctionne pas sur iOS 8 –

+0

Ne fonctionne pas sur l'ipad. – Sunita

3

Si vous voulez présenter cela comme un popup modal dans iOS 8 avec un style similaire à la capture d'écran de l'OP est ici ce que je faisais:

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 que d'utiliser un UIPopover parce que vous n'avez pas besoin de jouer avec les directions fléchées et l'utilisateur ne peut le fermer par tappin g en dehors du 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.

0

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

  1. Ajouter un contrôleur de vue (V2), la configuration de l'interface utilisateur de la manière que vous voulez

* basé sur l'image que vous avez attachée

  • ajouter un UIView - définir l'arrière-plan au noir et l'opacité à 0,5
  • ajouter un UIImageView - qui servira de popup (Veuillez noter que l'image et la vue ne doivent pas avoir le même niveau/hiérarchie. Ne pas faire le imageview l'enfant de la vue sinon l'opacité du UIView affectera la UIImageView)
  1. Présent V2 modalement

  2. Cliquez sur le Segue. Dans l'inspecteur Attributs, Définir la présentation en tant que En plein écran. Retirer l'animation si vous aimez

Storyboard

  1. Sélectionnez V2. Dans l'inspecteur Attributs, Définir la présentation en tant que En plein écran. Vérifiez Contexte et Définit fournit un contexte

Storyboard

  1. Sélectionnez le MainView de votre V2 (Pls. Vérifiez l'image). Set backgroundColor à Clear Color

Storyboard

Questions connexes