Два ModalViewController - PullRequest
       2

Два ModalViewController

3 голосов
/ 21 октября 2010

У меня есть навигационный контроллер, откуда я запускаю ModalViewController.В этом ModalViewController я буду отображать MailComposer, который сам по себе является другим ModalViewController.

Теперь, если пользователь нажимает кнопку отправки, MailComposerView должен быть отклонен так же, как и другой ModalViewController.Для этого я вызываю метод делегата в mailComposerController.

Теперь будет отклонен только MailComposerView, но нет другого ModalViewController, и я получаю следующее сообщение об ошибке

attempt to dismiss modal view controller whose view does not currently appear. self = <UINavigationController: 0x724d500> modalViewController = <UINavigationController: 0x72701f0>

У вас есть идея?что я делаю не так?

Первый ModalView

- (void)addList {
NSLog(@"addList");

//AddListViewController *addListViewController = [[AddListViewController alloc] init];
AddListViewController *addListViewController = [[AddListViewController alloc] initWithStyle:UITableViewStyleGrouped];
addListViewController.delegate = self;

UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:addListViewController];
navigationController.navigationBar.barStyle = UIBarStyleBlack;
navigationController.navigationBar.translucent = YES;
[self presentModalViewController:navigationController animated:YES];

[navigationController release];
[addListViewController release];    }

В AddListViewController, вызывающем MailView

MFMailComposeViewController *mailComposer = [[MFMailComposeViewController alloc] init];
    mailComposer.mailComposeDelegate = self;

    NSString *subject = [NSString stringWithFormat:@"Group invite for groupname: %@", @"mhm"];
    [mailComposer setSubject:subject];

    // Fill out the email body text
    NSString *emailBody = @"This is an group invite bla bla";
    [mailComposer setMessageBody:emailBody isHTML:NO];

    [self presentModalViewController:mailComposer animated:YES];
    [mailComposer release]; 

В методе mailComposerController

[self.navigationController dismissModalViewControllerAnimated:YES];
[self.delegate finishAddList:checkmark andListName:listName.text];

В делегате finsihAddList

[self dismissModalViewControllerAnimated:YES];

Ответы [ 2 ]

8 голосов
/ 01 сентября 2011

У меня была похожая проблема.У меня был стек модально представленных контроллеров представления.Когда я пытался отклонить их, начиная с видимого и двигаясь вниз по стеку, я терпел неудачу с той же ошибкой.Решение состояло в том, чтобы отклонить контроллер представления внизу стека.Было бы отклонено все, что выше него.

В вашем случае мое решение будет состоять в том, чтобы изменить метод mailComposerController, чтобы он содержал только одну строку (без отклонения самого верхнего модального vie-контроллера).1004 *

Я знаю, что вы уже решили свою проблему, но подумали, что это может быть полезно для других.

3 голосов
/ 21 октября 2010

Вы должны вызвать второе увольнение с задержкой, потому что первое увольнение еще не было сделано при вызове.

[self performSelector: @selector(finish:) withObject: obj afterDelay: 0.0f];

Задержка 0,0f является преднамеренной, это означает, что она будет выполнена вцикл следующего события.

...