¿Cómo puedo descartar dos controlleres de vista modal en sucesión * con animation *?

Sí, sé que hay exactamente la misma pregunta, pero quiero hacer esto con la animation double dismiss. Cómo deshacer 2 controlleres de vista modal en sucesión?

mi código es igual que la pregunta anterior,

ver el controller A (en el controller de navigation) – controller de vista modal B – controller de vista modal C

aquí hay un pseudo código

notification to B (as delegate) // I changed order of this two lines, dismiss C *without* animation // but it was same. (notification from C, in B) dismiss B *with* animation 

Si uso animation cuando elimino C, no funciona, B no se descartará, porque la animation de desestimación de C está reproduciéndose.

El problema es que no puedo comenzar otra animation de rechazo si hay animation.

¿Puedo reproducir la animation de rechazo en sucesión?

Este no es solo un problema de despedida de animation, sino que también se puede aplicar a otras animaciones iOS.

PS: Creo que puedo usar el timer para esperar hasta que la primera animation termine, pero está sucia y no es estable, ¿no?

Small Talk: en mi progtwig,

  • A: vista de list de artículos
  • B: escribir vista de artículo
  • C: vista de inicio de session (si el usuario no está conectado)

hoy, tengo que añadir join view, tengo que descartar 3 puntos de vista a time ¿Cómo puedo ayudar esto?

iOS 5.0 y superior:

[self.presentingViewController.presentingViewController dismissViewControllerAnimated:YES completion:nil];

Esto funciona si tiene:

 A - starting view controller M1 - modally presented by A M2 - modally presented by M1 

Ponga esa línea de código en la class de controller de vista de M2 ​​(y un button o lo que sea para activarlo), y "alcanzará" a través de la jerarquía y le dirá a A que dismissViewControllerAnimated:...

Sin embargo, la respuesta de Rahul Vayas es probablemente un mejor enfoque para los casos en que tiene un número desconocido de controlleres de vista modal que se extiende entre "A" y la última vista modal.

Puede generar una NSNotification y luego, desde la raíz donde aparece su primer modal, descartará el primer controller de vista modal y todos los demás desaparecerán automáticamente. Lo he hecho en una de mis aplicaciones.

Puede usar [self dismissModalViewControllerAnimated: (BOOL)] cuando desea que la vista rechace la vista modal. Si llama a esto en ambos controlleres, debería funcionar. No lo he probado yo mismo, pero parece lógico.

Debo agregar que si necesita presentar varias vistas modal seguidas, tal vez debería considerar el uso de diferentes paradigmas para algunos de ellos. Por ejemplo, la vista de inicio de session podría ser una vista de alerta en lugar de un controller de vista modal.

Me he encontrado con types similares de problemas tratando de hacer que las animaciones funcionen de forma sucinta. He estado intentando probar lo siguiente:

¿Qué pasa si pones la llamada para la segunda animation (es decir, para dimiss B) dentro de una llamada para realizar el selector en un hilo principal? Eso me haría pensar que la segunda animation se vería obligada a esperar a que la primera se completara.

Aún no lo he probado. Buena suerte, tengo mucha curiosidad sobre qué solución se te ocurre.

Puede eliminar 2 vista utilizando

 [AviewController dismissModalViewControllerAnimated:YES]; 

Aquí AviewController es object de A. Espero que esto te ayude.

[self dismissModalViewControllerAnimated:(BOOL)] no funciona. La segunda animation no se dispara. En iOS 5 puede usar [self dismissViewControllerAnimated:YES completion:^{}]; pero eso no es compatible con 4.0. Solo he tenido éxito al llamar a un método de delegado que cierra el controller de vista modal antes de presentar el nuevo.