不调用呈现视图控制器的dismissModalViewControllerAnimated:方法的模式视图控制器

在我的模式视图控制器,我有一个button处理方法,其中包括

[self dismissModalViewControllerAnimated: YES]; 

在呈现视图控制器我重写dismissModalViewControllerAnimated:如下所示:

 -(void) dismissModalViewControllerAnimated: (BOOL)animated { NSLog(@"dismiss"); [super dismissModalViewControllerAnimated: animated]; } 

当button被触摸时,button处理方法被调用,但dismissModalViewControllerAnimated:覆盖似乎并没有被调用:NSLog(@“dismiss”); 语句不被调用,并且方法内部的断点不会被打中。

我试过了

 [[self presentingViewController] dismissModalViewControllerAnimated: YES]; 

但是这也不起作用。 但是,模态视图控制器不会被解雇。

任何想法可能会出错?

这通常是通过声明您的呈现视图控制器作为您的模态视图控制器的委托处理。 模态VC然后在呈现VC中调用委托方法来消除它创build的模态转换。

例:

模态VC.h:

 @protocol ModalViewControllerDelegate -(void)dismissMyModalViewController; @end 

Modal VC.m:

 // When you want to dismiss the Modal VC [delegate dismissMyModalViewController]; 

介绍VC.h:

 // Make sure to #import ModalVC.h @property (nonatomic, retain) id <ModalViewControllerDelegate> delegate; 

介绍VC.m:

 -(void)dismissMyModalViewController { [self dismissModalViewControllerAnimated:YES]; } 

从编程的iOS 6,马特·纽伯格 :

在iPad上,当呈现的视图控制器的modalPresentationStyle是UIModalPresentationCurrentContext时,必须作出什么视图控制器应该是呈现的视图控制器的呈现控制器的决定。 这将决定什么视图将被呈现的视图控制器的视图所取代。 这个决定涉及另一个UIViewController属性definePresentationContext(BOOL)。 从presentViewController:animated:completion:被发送到的视图控制器开始,我们走上父视图控制器的链,查找一个definePresentationContext属性为YES的控件。 如果我们find一个,就是那个; 它将是presentationViewController,它的视图将被呈现的视图控制器的视图所取代。 如果我们没有find一个,事情工作,如果所呈现的视图控制器的modalPresentationStyle已经UIModalPresentationFullScreen。

TL; DR
1.在所需的definesPresentationContext设置为true
2.将modalPresentationStyle设置为所需的presentedViewController上的UIModalPresentationCurrentContext

呈现模式视图控制器的代码包含在UIViewController中,而UIViewController又包含在UINavigationController中。 当我打电话

 [[self presentingViewController] dismissModalViewControllerAnimated: YES]; 

要么

 [self dismissModalViewControllerAnimated: YES]; 

解雇消息被发送到UINavigationController对象。