首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >两个ModalViewController

两个ModalViewController
EN

Stack Overflow用户
提问于 2010-10-21 22:17:59
回答 2查看 3.2K关注 0票数 3

我有一个启动ModalViewController的navigationController。在这个ModalViewController中,我将显示MailComposer,它本身是另一个ModalViewController。

现在,如果用户点击send按钮,则MailComposerView和其他ModalViewController都应该被清除。为此,我在mailComposerController中调用了一个委托方法。

现在,只有MailComposerView将被取消,但其他ModalViewController和我会收到以下错误消息

代码语言:javascript
复制
attempt to dismiss modal view controller whose view does not currently appear. self = <UINavigationController: 0x724d500> modalViewController = <UINavigationController: 0x72701f0>

你知道我会做错什么吗?

第一个ModalView

代码语言:javascript
复制
- (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];    }

在调用MailView的AddListViewController中

代码语言:javascript
复制
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方法中

代码语言:javascript
复制
[self.navigationController dismissModalViewControllerAnimated:YES];
[self.delegate finishAddList:checkmark andListName:listName.text];

在finsihAddList委托中

代码语言:javascript
复制
[self dismissModalViewControllerAnimated:YES];
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-10-21 22:27:46

您必须延迟调用第二个dismiss,因为第一个dismiss在调用时还没有完成。

代码语言:javascript
复制
[self performSelector: @selector(finish:) withObject: obj afterDelay: 0.0f];

0.0f的延迟是故意的,这意味着它将在下一个事件循环中完成。

票数 3
EN

Stack Overflow用户

发布于 2011-09-01 21:23:23

我也遇到过类似的问题。我有一堆以模态表示的视图控制器。当我试图从可见的那个开始并向下移动堆栈时,我将失败,并返回相同的错误。解决方案是取消堆栈底部的视图控制器。它会抛弃所有高于它的东西。

在您的示例中,我的解决方案相当于更改mailComposerController方法,使其只包含一行(不会忽略最顶层的模态vie控制器)。

代码语言:javascript
复制
[self.delegate finishAddList:checkmark andListName:listName.text];

我知道你已经解决了你的问题,但我想这对其他人可能会有帮助。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3988432

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档