模态UIImagePickerController被解除时的UIView通知?

有没有办法在模态视图完成解雇时调用代码?

编辑:

对不起,我之前没有澄清过。 我正在尝试解除UIImagePickerController,然后显示MFMailComposeViewController并将图像数据附加到电子邮件中。 当我试着打电话的时候

[self presentModalViewController: mailController]

之后

[self dismissModalViewController];

我得到错误等。

您可以使用模式视图的委托模式来通知在完成时呈现它的任何人。

MyModalViewController.h:

 @protocol MyModalViewControllerDelegate; @interface MyModalViewController : UIViewController { id delegate; } @property (nonatomic, assign) id delegate; @end @protocol MyModalViewControllerDelegate - (void)myModalViewControllerFinished:(MyModalViewController*)myModalViewController; @end 

MyModalViewController.m:

 @synthesize delegate; // Call this method when the modal view is finished - (void)dismissSelf { [delegate myModalViewControllerFinished:self]; } 

ParentViewController.h:

 #import "MyModalViewController.h" @interface ParentViewController : UIViewController  { } 

ParentViewController.m:

 - (void)presentMyModalViewController { MyModalViewController* myModalViewController = [[MyModalViewController alloc] initWithNibName:@"MyModalView" bundle:nil]; myModalViewController.delegate = self; [self presentModalViewController:myModalViewController animated:YES]; [myModalViewController release]; } - (void)myModalViewControllerFinished:(MyModalViewController*)myModalViewController { [self dismissModalViewControllerAnimated:YES]; } 

编辑:

我没有使用过UIImagePickerController ,但是查看文档,看起来你已经为你完成了大部分代码,因为现有的UIImagePickerControllerDelegate类有三个不同的“解雇”委托回调(尽管有一个不推荐使用)。 因此,您应该使您的ParentViewController类(无论是什么)实现UIImagePickerControllerDelegate模式,然后实现这些方法。 虽然每个方法都会做一些不同的事情(因为你必须在用户实际选择一个图像时处理它们,或者如果它们取消了),它们每个人都会在最后做同样的事情:调用dismissModalViewControllerAnimated:取消选择器。

不得不以某种方式解雇modalViewController吗? 无论是UIButton还是代码:

 - (void)dismissModalViewControllerAnimated:(BOOL)animated 

在UIButton的IBAction(例如委托)或上面的方法中,调用您想要的任何代码。

我不认为有一个特定的通知可以订阅,知道何时解雇动画,…但是。 您可以在呈现模态视图的视图控制器中实现viewDidAppear: . 这就是我所做的,当我使用(到UIImagePickerController非常相似)ABPeoplePickerNavigationController时。

在人们选择器的回调中,我记得那个人在一个实例变量中点击了选择器,如下所示:

 - (void)callbackFromModalView:(id)dataFromModalView { // remember dataFromModalView as I need it when dismissed self.dataFromModalView = dataFromModalView; // now initiate dismissal [self dismissModalViewControllerAnimated:YES]; } 

然后,在您的视图控制器中,实现此:

 - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; if (self.dataFromModalView) { //...present now view here // don't forget to reset this one self.dataFromModalView = nil; } } 

实际上,您正在使用viewWillAppear:dataFromModalView属性的组合作为“关于模态视图被解除的通知”。