He creado un controlador de vista contenedor personalizado utilizando la new UIViewController container view controller methods en IOS 5.Problema con modales Ver Controladores y definesPresentationContext
El problema es que, a pesar de mi controlador de contenedor secundario UIViewController tiene definesPresentationContext = YES
, cuando creates and presents another modal view controller, UIKit establece el contenedor (en lugar del niño) como el controlador que presenta.
Por ejemplo, en MyChildViewController.m:
- (void)showMailComposeView:(id)sender {
__block MFMailComposeViewController *vc =
[[MFMailComposeViewController alloc] init];
vc.mailComposeDelegate = self;
vc.subject = @"Subject";
self.definesPresentationContext = YES;
[self presentViewController:vc animated:YES completion:^{
if ([self.modalViewController isEqual:vc])
NSLog(@"This should print...");
if ([vc.presentingViewController isEqual:self.parentViewController])
NSLog(@"... but this shouldn't");
// NOTE: Both log statements printed
}];
}
- (void)mailComposeController:(MFMailComposeViewController*)controller
didFinishWithResult:(MFMailComposeResult)result
error:(NSError*)error
{
[self dismissViewControllerAnimated:YES completion:^{}];
// NOTE: self.parentViewController.view now displays instead of self.view
}
Dónde estoy haciendo mal?
¿Cómo me aseguro de que sea hijo vista que se revela cuando la vista modal se descarta (en lugar de la vista de contenedor)?
Aunque mi pregunta/problema era un poco diferente, esta ¡trabajó para mi! ¡Gracias! – chadbag
Lo mismo aquí. ¡Gracias por esto! – Robert
Interesante en cuanto a por qué en un iPhone, modal siempre es desde la vista raíz. Tengo una situación de contenedor similar en el iPhone y al hacer todo lo anterior, me preguntaba por qué la vista modal no se presentaba dentro de los límites de la vista del controlador de vista infantil. Parece que esto es solo un comportamiento del iPhone que es diferente al iPad. – idStar