2011-09-14 17 views
10

Fondamentalmente quello che sto cercando di capire è, ad esempio, che ho un View Controller, chiamato V1, che ha una vista regolare al suo interno e un pulsante . Ora, quando si tocca quel pulsante, voglio che quel pulsante crei un'azione che fa apparire un altro View Controller, chiamato V2, all'interno dello stesso controller di visualizzazione, V1.Xcode: Come creare un controller di visualizzazione a comparsa che appare in un'altra vista Controller

V2 verrà ridotto di dimensioni in modo che non riempia l'intero schermo, ma è ancora possibile vedere il primo livello che è V1 dietro V2. Quindi, in pratica, non lasci mai veramente V1. Spero che abbia senso per quello che sto cercando di fare. So che l'app MTV ha questa funzionalità. Un'immagine di ciò di cui sto parlando è qui: https://docs.google.com/leaf?id=0BzlCAVXRsIPcNWUxODM2MDAtNDE3OS00ZTc4LTk5N2MtZDA3NjFlM2IzNmZk&hl=en_US

Il codice di esempio o un esempio è quello che sto cercando.

Grazie

risposta

24

È possibile creare tale punto di vista impostando adeguato tipo di proprietà di modalPresentationStyle. Vedere il mio esempio qui sotto:

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

ottengo uno schermo scuro vuoto. Questo non funziona su iPhone? –

+0

@ChaseRoberts funzionerà solo su iPad. Su iPhone è sufficiente impostare le proprietà 'modalPresentationStyle' e' modalTransitionStyle' e non modificare altri valori. – Nekto

+0

Qual è il codice per iPhone? – Peter

6

Prova questo:

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

Ho avuto lo stesso problema, quando ho provato questo codice ha gettato un'eccezione - "[UIPopoverController initWithContentViewController:] chiamato quando non è in esecuzione in UIUserInterfaceIdiomPad." – stanley

+0

Questo codice funziona solo con iPad non con iPhone come in iPhone non esiste una classe chiamata 'UIPopoverController' –

0

file .m ---> Questo è il file di implementazione

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

ricordare dichiarare

-(IBAction)anyAlert:(id)sender; 

nel file .h ---> file di intestazione

Funziona per me, si spera per te ...

+0

Questo è stato deprecato e non consiglierei di usare un avviso come sostituto per modale. – Tommyixi

0

Creare UIView per v2 e aggiungere in 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

C'è una buona biblioteca per visualizzare un controller della vista come Popup su iPhone vedi qui https://github.com/martinjuhasz/MJPopupViewController

+0

Grandi cose. Uso molto pratico pure. Stavo cercando qualcosa di esattamente come questo.grazie per il link –

+0

Spiacente, non funziona su iOS 8 –

+0

NON funziona su ipad. – Sunita

3

Se si vuole presentare questo come un popup modale in iOS 8 con uno stile simile a screenshot del PO qui è quello che ho fatto:

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 

mi piace questo meglio che utilizzare un UIPopover perché non c'è bisogno di pasticciare con le indicazioni freccia e l'utente non può chiuderlo Tappin g al di fuori del popup.

Queste proprietà possono anche essere impostate in uno storyboard/pennino tramite il designer. Per impostare preferredContentSize, selezionare "Usa dimensioni esplicite preferite" e impostare i valori.

Questo funziona solo su iPad.

0

Se stai usando Storyboard, è possibile seguire questa procedura:

  1. Aggiungere un controller della vista (V2), messa a punto l'interfaccia utente il modo in cui lo si vuole

* in base all'immagine che hai allegato

  • aggiungi un UIView - imposta lo sfondo su nero e opacità su 0.5
  • aggiungi un UIImageView - che servirà da popup (Pls prende atto che l'immagine e la vista non devono avere lo stesso livello/gerarchia. Non fare l'imageview il bambino della vista altrimenti l'opacità del UIView influenzerà l'UIImageView)
  1. Presente V2 modale

  2. Fare clic sulla segue. Nella finestra di ispezione Attributi, imposta presentazione come su schermo intero. Rimuovere l'animazione se ti piace

Storyboard

  1. Select V2. Nella finestra di ispezione Attributi, imposta presentazione come su schermo intero. Controllare Definisce Contesto e fornisce un contesto

Storyboard

  1. Selezionare la MainView del V2 (Pls. Verificare l'immagine). Impostare backgroundColor per Clear Color

Storyboard

Problemi correlati