Utworzyłem kontroler widoku niestandardowego kontenera przy użyciu new UIViewController container view controller methods w iOS 5.Problem ze sterownikami i modalnych Zobacz definesPresentationContext
Kłopot w tym, choć moim kontrolera kontenera dziecko UIViewController ma definesPresentationContext = YES
, gdy creates and presents another modal view controller, UIKit ustawia kontener (a nie dziecko) jako kontroler prezentujący.
Na przykład w 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
}
Gdzie jestem będzie niewłaściwy?
Jak upewnić się, że jest to widok, który zostanie ujawniony, gdy widok modalny zostanie odrzucony (zamiast widoku kontenera)?
Podczas gdy moje pytanie/problem był trochę inny, to pracował dla mnie! Dzięki! – chadbag
To samo tutaj. Dziękuję Ci za to! – Robert
Ciekawe, dlaczego na telefonie iPhone modal jest zawsze z widoku głównego. Mam podobną sytuację dotyczącą kontenera na iPhonie i wykonując wszystkie powyższe, zastanawiałem się, dlaczego widok modalny nie był prezentowany w granicach widoku kontrolera widoku podrzędnego. Wygląda na to, że jest to zachowanie iPhone'a inne niż iPad. – idStar