2011-09-14 20 views
10

Básicamente, lo que estoy tratando de hacer es decir, tengo un controlador de vista, llamado V1, que tiene una vista normal dentro de él y un botón . Ahora, cuando toca ese botón, quiero que ese botón cree una acción que muestre otro Controlador de Vista, llamado V2, dentro del mismo controlador de vista, V1.Xcode: Cómo crear un controlador de vista emergente que aparece en otro controlador de vista

Se reducirá el tamaño de V2 para que no ocupe toda la pantalla, pero aún se puede ver la primera capa, que es V1 detrás de V2. Entonces, básicamente, nunca dejas realmente V1. Espero que esto tenga sentido para lo que estoy tratando de hacer. Sé que la aplicación MTV tiene esta función. Una imagen de lo que estoy hablando está aquí: https://docs.google.com/leaf?id=0BzlCAVXRsIPcNWUxODM2MDAtNDE3OS00ZTc4LTk5N2MtZDA3NjFlM2IzNmZk&hl=en_US

Código de ejemplo o un ejemplo es lo que estoy buscando también.

Gracias

Respuesta

24

Puede crear dicha vista estableciendo el tipo de propiedad adecuada de modalPresentationStyle. Ver mi ejemplo a continuación:

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

consigo una pantalla oscura en blanco. ¿Esto no funcionará en iPhone? –

+0

@ChaseRoberts funcionará solo en iPad. En iPhone, simplemente configure las propiedades 'modalPresentationStyle' y' modalTransitionStyle' y no cambie otros valores. – Nekto

+0

¿Cuál es el código para iPhone? – Peter

6

Prueba esto:

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

tuve el mismo problema, cuando probé este código, lanzó una excepción: "[UIPopoverController initWithContentViewController:] llamado cuando no se ejecuta bajo UIUserInterfaceIdiomPad". – stanley

+0

Este código solo funciona con iPad, no con iPhone, ya que en iPhone no existe una clase llamada 'UIPopoverController' –

0

file .m ---> Este es el archivo de implementación

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

recordar declarar

-(IBAction)anyAlert:(id)sender; 

en el file .h ---> archivo de cabecera

Funciona para mí, es de esperar para usted ...

+0

Esto ha quedado en desuso y yo no recomendaría usar una alerta como sustituto de modal. – Tommyixi

0

Crear UIView para v2 y añadir en 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

Hay una muy buena biblioteca para mostrar un controlador de vista como emergente en el iPhone ver aquí https://github.com/martinjuhasz/MJPopupViewController

+0

cosas geniales. Uso muy práctico también. Estaba buscando algo exactamente como esto.gracias por el enlace –

+0

Lo sentimos, no funciona en iOS 8 –

+0

NO funciona en el ipad. – Sunita

3

Si quiere presentar esto como una ventana emergente modal en iOS 8 con un estilo similar al de captura de pantalla de la OP esto es lo que hice:

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 

me gusta esta mejor que usar un UIPopover debido a que no es necesario meterse con direcciones de la flecha y el usuario no puede cerrar por tappin g fuera de la ventana emergente.

Estas propiedades también se pueden establecer en un guión gráfico/plumilla a través del diseñador. Para establecer preferredContentSize, marque "Usar tamaño explícito preferido" y establezca los valores.

Esto solo funciona en el iPad.

0

Si está utilizando Storyboard, puede seguir este paso:

  1. Agregar un controlador de vista (V2), la configuración de la interfaz de usuario de la forma que desee

* según la imagen que adjuntó

  • agregue un UIView - configure el fondo en negro y la opacidad en 0.5
  • agregue un UIImageView - que servirá como su ventana emergente (Pls tenga en cuenta que la imagen y la vista no deben tener el mismo nivel/jerarquía. No haga que la imageview el niño de la opinión de otra manera la opacidad del UIView afectará a la UIImageView)
  1. presente V2 Modalmente

  2. Haga clic en el segue. En el inspector de atributos, configure Presentación como en pantalla completa. Retire la animación si te gusta

Storyboard

  1. Seleccionar V2. En el inspector de atributos, configure Presentación como en pantalla completa. Compruebe Define Contexto y proporciona un contexto

Storyboard

  1. Seleccione la MainView de su V2 (por favor. Compruebe la imagen). Establecer backgroundColor a Clear Color

Storyboard

Cuestiones relacionadas