Как отклонить UIPresentationController, нажав его затемнение

Я использую UIPresentationController показать пользовательский модал. контроллер представления имеет UIView затемняемый вид, анимированный во время показа. Сам модал является UIViewController добавлен в контейнер контроллера презентации.

Эта проблема

Я могу только позвонить [self dismissViewControllerAnimated:NO completion:nil] из встроенного UIViewController. Но я не могу сделать то же самое из UIPresentationController, Но вот где димминг.

Я хотел бы избежать добавления дополнительных невидимых представлений к модальным или использовать NSNotificationCenter если возможно.

Как вы уволить UIPresentationController нажав его затемнение зрения? Имеет ли это смысл? Является ли это возможным?

3 ответа

Хорошо, я нашел это. Вы можете связаться с показанным UIViewController, чтобы закрыть через self.presentedViewController

[self.presentedViewController dismissViewControllerAnimated:YES completion:nil];

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

- (void)viewDidAppear:(BOOL)animated {
    if (!self.tapOutsideRecognizer) {
        UITapGestureRecognizer *tapOutsideRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapBehind:)];
        self.tapOutsideRecognizer.numberOfTapsRequired = 1;
        self.tapOutsideRecognizer.cancelsTouchesInView = NO;
        self.tapOutsideRecognizer.delegate = self;
        [self.view.window addGestureRecognizer:self.tapOutsideRecognizer];
    }
}

- (void)handleTapBehind:(UITapGestureRecognizer *)sender {
    if (sender.state == UIGestureRecognizerStateEnded) {
        CGPoint location = [sender locationInView:nil];

        if (![self.view pointInside:[self.view convertPoint:location fromView:self.view.window] withEvent:nil]) {
            [self.view.window removeGestureRecognizer:sender];

            [self back:sender];
        }
    }
}

- (IBAction)back:(id)sender {
    [self dismissViewControllerAnimated:YES completion:nil];
}

Да, это возможно... сначала вы должны добавить жест касания в режиме затемнения и добавить действие жест касания...

[self dismissViewControllerAnimated:YES completion:nil];

это решит вашу проблему.

Другие вопросы по тегам