4

我知道这里有 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 中的模态视图。

4

3 回答 3

2

试试这个:-

当您关闭您在应用程序委托文件中SecondView设置的BOOL标志变量并在您FirstViewviewWillAppear方法中检查该变量时 SecondView 是否打开和关闭。如果是这样,那么 [self dismissModalViewControllerAnimated:true]

于 2012-06-21T11:29:06.867 回答
1

典型的模型视图控制器行为会建议您从调用视图控制器而不是 self.dismiss 模式视图控制器。不是硬性规定,而是良好的做法。

为此,请创建一个协议:

    @protocol MyModalViewControllerDelegate
    - (void)modalViewControllerDidFinish;
    @end

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

    @interface FirstModalViewController <MyModalViewControllerDelegate>

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

    @property id<MyModalViewControllerDelegate> modalViewControllerDelegate

在 parentViewController 和 FirstModalViewController 中,在调用 presentModalViewController:... 之前,设置以下内容:

    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]
    }
于 2012-06-22T09:52:09.490 回答
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];
于 2015-07-03T08:55:05.187 回答