2010-12-01 2 views
0

Хорошо, вот ситуация: у меня есть главный ViewController (mainVC) с контроллером навигации (NC) и двумя дочерними контроллерами ViewControllers (childVC1-childVC2).MFMailComposeViewController нарушает поведение NavigationController

Панель навигации НК получает скрыта, когда viewWillAppear вызывается на mainVC:
- (void) viewWillAppear:(BOOL)animated {
[self.navigationController setNavigationBarHidden:TRUE animated:animated]; }

Панель навигации отображается перед любым видом ребенка проталкиваются на mainVC через NC:
mainVC *childVC1 = [[childVController1 alloc] initWithNibName:@"childVController1" bundle:nil];
[self.navigationController setNavigationBarHidden:FALSE animated:TRUE];
[self.navigationController pushViewController:childVC1 animated:YES];
[childVC1 release];

Панель навигации снова скрывается через viewWillAppear mainVC, когда она вызывается после того, как любое дочернее представление выставляется через стандартную кнопку «Назад» на панели навигации.

Все работает плавно, пока MFMailComposeViewController, стандартное письмо ViewController вызывается с помощью метода presentModalViewController из любого дочернего ViewController:
- (void) sendMail {
MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];
picker.mailComposeDelegate = self;
[picker setSubject:[NSString stringWithFormat:@"Subject"];
NSString emailBody=[NSString stringWithFormat:@"Mail Message Body"]];
[picker setMessageBody:emailBody isHTML:NO];
[picker setToRecipients:[NSArray arrayWithObject:@"[email protected]"]];
if (picker != nil) {
[self presentModalViewController:picker animated:YES];
[picker release];
} else {
NSLog(@"No email configured");
}
}
- (void)mailComposeController:(MFMailComposeViewController
)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error {
[self dismissModalViewControllerAnimated:YES];
}

Теперь почта ViewController уволен (С.Е. nt mail), и мы находимся на childviewController.

В этот момент, если мы нажмем кнопку «Назад» на панели навигации, чтобы вернуться к mainVC, панель навигации не скроется. Потому что метод viewWillAppear на mainVC не вызван.

Я попытался реализовать работу, представив делегата для контроллера навигации изнутри дочернего представления, тем самым скрыв NavBar и щелкнув дочерний вид после разборки контроллера почтового вида (отправленной почты).

Это, казалось, сделало трюк, но, следуя приведенным выше действиям (отправленное письмо, скрыть NavBar и pop child view), если я сразу же нажимаю любое дочернее представление (emailer childVC1 или другое довольно плоское childVC2), а затем выворачивает его через кнопка «Назад», панель навигации снова не скрывается! Потому что метод viewWillAppear на mainVC еще не вызван. viewWillDisappear на childVC также не вызываются.

Я пришел к выводу, что путем вызова метода viewController через метод presentModalViewController из любого дочернего viewController я каким-то образом нарушаю навигационный механизм navigationController.

Обратите внимание, что mainVC отображается внутри TabBarItem. И если я перейду на другую вкладку и вернусь обратно к этому, поведение navigationController будет восстановлено - это пока я не отправил другую почту.

Должно быть, что-то я не делаю должным образом. Есть идеи?

+0

Мне было бы интересно узнать, что происходит, когда вы пытаетесь представить другой контроллер представления как модальный (в отличие от почтового контроллера.) – Sam 2010-12-01 09:06:51

ответ

1

Вы пытались поместить код скрытия в viewDidAppear вместо viewWillAppear?

+0

Спасибо за ответ. Просто попробовал это. К сожалению, это не помогло. – BoraOku 2010-12-01 08:35:34

Смежные вопросы