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