关闭两个模态(表)视图控制器

时间:2012-06-21 11:11:26

标签: iphone ios xcode storyboard modalviewcontroller

我知道这里有3-5个类似的问题,但没有答案解决了我的问题。

我有一个ViewController,它打开一个模态(表)视图控制器,打开另一个控制器。两个模态视图控制器实际上都是表视图控制器。我试图从第二个中解雇他们。我在类似问题上尝试了所有接受的答案,但没有一个能为我工作。

我试过

[self dismissModalViewControllerAnimated:true]

[self.parentViewController dismissModalViewControllerAnimated:true]
[self.parentViewController.parentViewController dismissModalViewControllerAnimated:true]

[self.presentingViewController dismissModalViewControllerAnimated:true]
[self.presentingViewController.presentingViewController dismissModalViewControllerAnimated:true]

当我尝试选项2,3和5时,根本没有任何事情发生。当我使用选项1和4时,我看到暂时忽略模态视图动画和基础视图本身,然后一切都回到第二个模态视图(这次没有动画)。

我开始认为这与我使用tableViewControllers进行模态视图有关。

顺便说一句,我正在解雇didSelectRowAtIndexPath中的模态视图。

3 个答案:

答案 0 :(得分:2)

试试这个: -

当您在app appate文件中关闭SecondView设置BOOL标记变量并在FirstView的{​​{1}}方法中检查该变量是否SecondView是打开和关闭与否。如果是,那么viewWillAppear

答案 1 :(得分:1)

典型的模型视图控制器行为会建议您从调用视图控制器而不是从self中关闭模态视图控制器。不是硬性规则,而是良好的做法。

要完成此任务,请创建协议:

    @protocol MyModalViewControllerDelegate
    - (void)modalViewControllerDidFinish;
    @end

并使parentViewController和FirstModalViewController成为此协议的实现者。

    @interface FirstModalViewController <MyModalViewControllerDelegate>

然后在FirstModalViewController.h和SecondModalViewController.h中添加:

    @property id<MyModalViewControllerDelegate> modalViewControllerDelegate
在调用presentModalViewController之前,在parentViewController和FirstModalViewController中都有

:...,设置以下内容:

    modalViewControllerAboutToAppear.modalViewControllerDelegate = self;
    [self presentModalViewController:modalViewControllerAboutToAppear animated:YES];

接下来,在SecondModalViewController中,在您确定需要解除项目的代码中,调用

    [self.modalViewControllerDelegate modalViewControllerDidFinish];

现在,在FirstModalViewController中,实现以下内容:

    - (void)modalViewControllerDidFinish:(MyModalViewController*)controller {
        [self dismissModalViewControllerAnimated:YES]
        [self.modalViewControllerDelegate modalViewControllerDidFinish];
    }

最后,在父视图控制器中,您应该能够执行:

    - (void)modalViewControllerDidFinish:(MyModalViewController*)controller {
        [self dismissModalViewControllerAnimated:YES]
    }

答案 2 :(得分:0)

由于我不使用委托文件,我执行了以下操作:

FirstView添加字段

BOOL mClose;

FirstView添加方法

- (void)close
{
    mClose = YES;
}

FirstView方法viewDidAppear添加

if (mClose)
{
    [self dismissModalViewControllerAnimated:YES];
}

打开FirstView添加

SecondView方法
[secondView closeWhenDone:self];

SecondView添加字段

FirstView *mParent;

SecondView添加方法

- (void)closeWhenDone:(FirstView*)parent
{
    mParent = parent;
}

关闭它的SecondView方法添加

[mParent close];