Уведомление UIView, когда модальный UIImagePickerController отклонен? - PullRequest
1 голос
/ 17 сентября 2010

Есть ли способ вызова кода, когда модальное представление завершает закрытие?

EDIT:

Извините, я не уточнил ранее. Я пытаюсь отклонить UIImagePickerController, а затем показать MFMailComposeViewController и прикрепить данные изображения к электронной почте. Когда я пытаюсь позвонить

[self presentModalViewController: mailController]

сразу после

[self dismissModalViewController];

Я получаю ошибки и тому подобное.

Ответы [ 3 ]

5 голосов
/ 17 сентября 2010

Вы используете шаблон делегата для модального представления, чтобы информировать того, кто представил его, когда он закончится.

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

EDIT:

Я не использовал UIImagePickerController, но, глядя на документы, похоже, что большая часть кода уже сделана для вас, так как существует класс UIImagePickerControllerDelegate, который имеет три различные обратные вызовы делегатов "увольнение" (хотя один из них устарел). Поэтому вы должны заставить свой класс ParentViewController (что бы это ни было) реализовывать шаблон UIImagePickerControllerDelegate, а затем реализовывать эти методы. В то время как каждый метод будет выполнять что-то свое (поскольку вы должны обрабатывать его, когда пользователь фактически выбирает изображение или отменяет его), каждый из них будет делать то же самое в конце: вызовите dismissModalViewControllerAnimated:, чтобы отменить выбор.

0 голосов
/ 01 ноября 2011

Я не думаю, что есть конкретное уведомление, но можно подписаться на него, чтобы узнать, когда завершится анимация, ... НО.Вы можете реализовать 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 в качестве "уведомления о модальном представлении"уволен».

0 голосов
/ 17 сентября 2010

Вы должны как-то уволить modalViewController, верно?Либо UIB-кнопка, либо по коду:

- (void)dismissModalViewControllerAnimated:(BOOL)animated

В IBAction (например, делегат) для UIButton или в методе выше, вызовите любой код, который вы хотите.

...