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

时间:2012-01-18 06:15:18

标签: ios uiviewcontroller uikit modal-dialog

在我的模态视图控制器中,我有一个包含

的按钮处理方法
[self dismissModalViewControllerAnimated: YES];

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

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

当触摸按钮时,调用按钮处理方法,但似乎没有调用dismissModalViewControllerAnimated:override:NSLog(@“dismiss”);语句未被调用,方法内的断点不会被命中。

我试过

[[self presentingViewController] dismissModalViewControllerAnimated: YES];

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

知道可能出现什么问题吗?

3 个答案:

答案 0 :(得分:2)

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

示例:

Modal VC.h:

@protocol ModalViewControllerDelegate
-(void)dismissMyModalViewController;
@end

模态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];
}

答案 1 :(得分:2)

来自Programming iOS 6, by Matt Neuburg

  

在iPad上,当呈现的视图控制器的modalPresentationStyle是UIModalPresentationCurrentContext时,必须决定哪个视图控制器应该是呈现的视图控制器的presentViewController。这将确定将由所呈现的视图控制器视图替换的视图。此决定涉及另一个UIViewController属性,definePresentationContext(BOOL)。从发送了presentViewController:animated:completion:的视图控制器开始,我们走向父视图控制器链,寻找其definePresentationContext属性为YES的控制器。如果我们找到一个,就是那个;它将是presentsViewController,它的视图将被呈现的视图控制器视图所取代。如果我们找不到,那么就像所呈现的视图控制器的modalPresentationStyle是UIModalPresentationFullScreen一样。

TL; DR
1.在期望的definesPresentationContext上将presentingViewController设置为true 2.在期望的modalPresentationStyle

上将UIModalPresentationCurrentContext设置为presentedViewController

答案 2 :(得分:0)

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

[[self presentingViewController] dismissModalViewControllerAnimated: YES];

[self dismissModalViewControllerAnimated: YES];

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