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

时间:2010-09-16 20:41:06

标签: iphone uiviewcontroller ios modal-dialog

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

编辑:

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

[self presentModalViewController: mailController]

之后

[self dismissModalViewController];

我得到错误等。

3 个答案:

答案 0 :(得分:5)

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

MyModalViewController.h:

@protocol MyModalViewControllerDelegate;

@interface MyModalViewController : UIViewController
{
    id<MyModalViewControllerDelegate> delegate;
}

@property (nonatomic, assign) id<MyModalViewControllerDelegate> 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 <MyModalViewControllerDelegate>
{
}

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:来解雇选择器。 / p>

答案 1 :(得分:0)

你必须以某种方式解雇modalViewController吗?无论是UIButton,还是代码:

- (void)dismissModalViewControllerAnimated:(BOOL)animated

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

答案 2 :(得分:0)

我认为还没有特定的通知可以订阅,知道什么时候关闭动画,...但是。您可以在呈现模态视图的视图控制器中实现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属性的组合作为“关于模态视图的通知被驳回”。