it-swarm.it

Xcode: Come creare un controller di visualizzazione popup che appare in un'altra vista Controller

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. 

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 questo abbia un 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

Esempio di codice o un esempio è quello che sto cercando pure.

Grazie

11
rs14smith

È possibile creare tale vista impostando il tipo di proprietà appropriato di modalPresentationStyle. Vedi 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];
24
Nekto

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

Se vuoi presentarlo come popup modale in iOS 8 con uno stile simile allo screenshot dell'OP, ecco cosa 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 meglio di usare un UIPopover perché non hai bisogno di fare confusione con le frecce e l'utente non può chiuderlo toccando 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. 

Funziona solo su iPad.

3
Kento

C'è una buona libreria per visualizzare un controller di visualizzazione come Popup su iPhone Vedi qui https://github.com/martinjuhasz/MJPopupViewController

1

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

ricordati di dichiarare 

-(IBAction)anyAlert:(id)sender; 

nel file di intestazione file .h --->

Funziona per me, spero per te ...

0
Santiago Montoya

Se stai usando Storyboard, puoi seguire questo passaggio:

  1. Aggiungi un controller di visualizzazione (V2), imposta l'interfaccia come desideri

* 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 rendere la vista di immagini il figlio della vista altrimenti l'opacità deliview interesserà uiImageView)
  1. Present V2 Modally

  2. Clicca il seguito. Nella finestra di ispezione Attributi, imposta presentazione come su schermo intero . Rimuovi l'animazione se vuoi

Storyboard

  1. Seleziona V2. Nella finestra di ispezione Attributi, imposta presentazione come su schermo intero . Controlla Definisce il contesto e fornisce il contesto

Storyboard

  1. Seleziona il MainView del tuo V2 (Pls. Controlla l'immagine). Imposta backgroundColor su Cancella colore

Storyboard

0
dhin

Crea UIView per v2 e aggiungi 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