4

UIPresentationControllerカスタムモーダルを表示するために を使用しています。プレゼンテーション コントローラには、UIView表示されているときにアニメーション化された調光ビューがあります。モーダル自体はUIViewController、プレゼンテーション コントローラーのコンテナーに追加されます。

問題

[self dismissViewControllerAnimated:NO completion:nil]埋め込まれた UIViewController からしか呼び出せません。しかし、私はから同じことをすることはできませんUIPresentationController. しかし、それが薄暗いビューです。

モーダルに非表示のビューを追加したりNSNotificationCenter、可能であれば使用したりしたくありません。

UIPresentationController薄暗いビューをタップしてを閉じるにはどうすればよいですか? それは理にかなっていますか?出来ますか?

4

3 に答える 3

6

わかりました、見つけました。表示された UIViewController にアクセスして、次の方法で閉じることができますself.presentedViewController

[self.presentedViewController dismissViewControllerAnimated:YES completion:nil];
于 2015-12-17T02:57:42.793 に答える
2

これを試すことができます:

- (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];
}
于 2015-12-16T16:00:17.317 に答える