ventana sirve que problema para modal emergente dinamico desde data cerrar boton bootstrap abrir iphone objective-c modalviewcontroller ios5

iphone - sirve - El controlador de vista modal no se ignorará



ventana modal bootstrap (6)

¿Cuál es el código que está utilizando para descartar el controlador de vista modal? He visto un código como este:

[self.parentViewController dismissModalViewControllerAnimated: YES];

eso no funciona en todas las versiones del sistema operativo. Sin embargo, esto:

[self dismissModalViewControllerAnimated: YES];

debería.

Que estoy haciendo:

En mi aplicación, presento un controlador de vista modal (que contiene la configuración de la aplicación) usando el siguiente código:

optionsViewController.modalTransitionStyle = UIModalTransitionStylePartialCurl; [self presentModalViewController:optionsViewController animated:YES];

Esta transición simplemente acurruca la parte inferior de la vista para exponer algunas configuraciones. (Consulte la aplicación ''Mapas'' para ver un ejemplo.) Cuando toca en la mitad superior de la página, donde la vista original todavía está allí pero atenuada, el controlador de vista modal se descarta automáticamente (manejado por el SO, no lo hice) código t para esto).

-

Lo que no funciona:

Esto funciona bien en iOS 4 (mi aplicación se encuentra actualmente en la App Store de hecho). Pero en iOS 5, parece que Apple ha cambiado el comportamiento de esta transición, y el controlador de vista ya no se descarta. Estoy tratando de replicar el comportamiento que manejó el sistema operativo antes, pero no puedo entender cómo hacerlo.

-

Lo que he intentado:

Agregar un botón invisible en la parte superior de la vista de opciones no funciona. La página se enrolla completamente, lo que no quiero.

Aparte de esto, estoy atascado. ¿Cómo debería replicar cómo funcionó originalmente (o lo estaba haciendo de la manera incorrecta desde el principio). ¡Cualquier ayuda es muy apreciada!


Amigo, me encontré con el mismo problema ... y aquí está lo que encontré sobre el uso de parentViewController:

Tenga en cuenta que a partir de 5.0 esto ya no devolverá el controlador de vista de presentación.

Esto fue escrito en el archivo de encabezado de UIViewController ...

Estoy usando ShareKit, y el modalViewController funcionaba perfectamente en iOS4, pero en iOS5, ¡no se descarta solo! Esto es porque en su código, están usando:

[[currentView parentViewController] dismissModalViewControllerAnimated:animated];

y parentViewController devolverá nil, ya que este es un controlador de vista presentado modal ...

Al buscar una solución, encontré su pregunta. Por lo tanto, decidí solucionarlo yo mismo: P

Cambié la línea anterior a esto:

[currentView dismissModalViewControllerAnimated:YES];

Funciona de maravilla.

EDITAR: según cómo interpretes la pregunta original, hay dos respuestas. Aquí está el segundo:

En iOS5 parece que el controlador modal solo se descarta al hacer clic en el rizo, pero no sobre el rizo o el fondo. En iOS5, para obtener realmente la vista modal para cerrarla al tocar el fondo o encima del rizo, agregué el siguiente código al controlador, para escuchar los grifos en la vista modal, pero ignorar los toques a los botones. Esto debería imitar el comportamiento en la versión anterior de iOS cuando se trabaja con un controlador modal con curl de página.

- (void)viewDidLoad { UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)]; tap.numberOfTapsRequired = 1; tap.numberOfTouchesRequired = 1; tap.delegate = self; [backgroundView addGestureRecognizer:tap]; } - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{ //change it to your condition if ([touch.view isKindOfClass:[UIButton class]]) { return NO; } return YES; } - (void)handleTap:(UITapGestureRecognizer *)sender { [self dismissModalViewControllerAnimated:YES]; }


En iOS5 parece que el controlador modal solo se descarta al hacer clic en el rizo, pero no sobre el rizo o el fondo. En iOS5, para obtener realmente la vista modal para cerrarla al tocar el fondo o encima del rizo, agregué el siguiente código al controlador, para escuchar los grifos en la vista modal, pero ignorar los toques a los botones. Esto debería imitar el comportamiento en la versión anterior de iOS cuando se trabaja con un controlador modal con curl de página.

- (void)viewDidLoad { UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)]; tap.numberOfTapsRequired = 1; tap.numberOfTouchesRequired = 1; tap.delegate = self; [backgroundView addGestureRecognizer:tap]; } - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{ //change it to your condition if ([touch.view isKindOfClass:[UIButton class]]) { return NO; } return YES; } - (void)handleTap:(UITapGestureRecognizer *)sender { [self dismissModalViewControllerAnimated:YES]; }


Esto parece funcionar en la (ahora versión final de) ios 5.

Noto que tiene que tocar es una región específica para cerrar la página. Hacer un doble clic cerca de los bordes de la parte superior de la pantalla no parece hacer nada, pero la sección central borrosa encima del gráfico de curvatura de la página da como resultado descartar la vista modal.

No estoy seguro de si el comportamiento de la región de toque estrecha es nuevo en iOS 5 o ya existía y nunca antes lo había notado. ¡Espero que sea útil!


Gracias chicos, esto me ahorró mucho tiempo. Me acabo de dar cuenta de que los métodos dismissModalViewController y dismissModalViewController están en desuso dismissModalViewController al código fuente de UIViewControoler.h . Hay métodos presentViewController y dismissViewController alternativos.


Tuve el mismo problema, también afecta a quienes usan:

[self.parentViewController.parentViewController dismissModalViewControllerAnimated:YES];

Lo soluciono con un Observer, agregando esto donde tuviste el descarte:

[[NSNotificationCenter defaultCenter] postNotificationName:@"yourObserverName" object:self];

Y esto en el controlador de vista principal parental:

// add in viewDidLoad for example [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(dismissModalVCFromParent:) name:@"yourObserverName" object: nil]; //The function - (void) dismissModalVCFromParent:(NSNotification *)notif { [self dismissModalViewControllerAnimated:YES]; } // Don''t forget remove [[NSNotificationCenter defaultCenter] removeObserver:self];