dismissModalViewControllerAnimated должна закончить анимацию перед удалением из суперпредставления? - PullRequest
1 голос
/ 23 января 2012

Я реализовал MFMailComposeViewController и столкнулся с проблемой.

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

Похоже, мне нужно дождаться окончания анимации (отклонить форму электронной почты), прежде чем можно будет запустить [self.view removeFromSuperview];.Если эта строка запускается до завершения анимации, ничего не происходит, и представление не удаляется, поэтому я не могу ничего коснуться на экране, поскольку текущий UIView не удаляется.

- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error {

    [self dismissModalViewControllerAnimated:YES];

    // Removes the view so that delegate is passed back to the superview
    [self.view removeFromSuperview];

}

Мое действие суперпредставления, которое вызываеткласс:

- (IBAction)buttonPressedSendMail {
    MailComposerViewController *mailComposer = [[MailComposerViewController alloc] init];
    [self addSubview:mailComposer.view];
    [mailComposer sendMail:nil];
}

[[self view] setHidden:YES]; для сокрытия работ UIView, но я не думаю, что это правильный способ сделать это.

Ответы [ 2 ]

3 голосов
/ 23 января 2012

Представьте свой контроллер представления с presentModalViewController: animated:

MailComposerViewController *mailComposer = [[MailComposerViewController alloc] init];
[self presentModalViewController:mailComposer animated:YES];

Затем отклоните модальное представление, как вы делаете

[self dismissModalViewControllerAnimated:YES];

Нет необходимости добавлять или удалять представление контроллера представления.

1 голос
/ 23 января 2012

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

double delayInSeconds = 1.0;
    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
    dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
        [self.view removeFromSuperview];
    });

или вы можете попробовать это:

[self dismissViewControllerAnimated: YES завершение: ^ { [self.view removeFromSuperview]; }];

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...