WKWebView расположение по нажатой ссылке - PullRequest
0 голосов
/ 26 марта 2019

В приложении iOS я использую WKWebView для загрузки изображения SVG.Внутри этого SVG есть ссылки, которые связаны с данными внутри другого объекта.Я использую метод делегирования навигации, чтобы проверить, нажата ли ссылка (например, flowchart://{id}).Для устройств iPad я хочу, чтобы исходный прямоугольник ссылки был нажат, чтобы показать детальный контроллер внутри всплывающего окна.Приведенный ниже код работает для устройств не-iPad, но как получить прямоугольник нажатой ссылки?

- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {
    if ([navigationAction navigationType] == WKNavigationTypeLinkActivated) {
        if ([[[[navigationAction request] URL] scheme] isEqualToString:@"flowchart"]) {
            NSMutableArray *components = [[[[navigationAction request] URL] pathComponents] mutableCopy];

            [components removeObjectAtIndex:0]; // First element is a slash.

            NSInteger identifier = [[components firstObject] integerValue];

            Section *section = [self getSectionForID:identifier];

            SectionViewController *details = [LocalizedStoryboard(@"Main") instantiateViewControllerWithIdentifier:@"SectionViewController"];

            [details setContent:[section content]];
            [[details navigationItem] setTitle:[section title]];

            if (iPad) { // Macro to check if device is an iPad.
                CGRect rect = CGRectZero; // Get the location of the link.

                SectionNavigationViewController *popover = [LocalizedStoryboard(@"Main") instantiateViewControllerWithIdentifier:@"SectionNavigationViewController"];

                [popover setViewControllers:@[details] animated:NO];

                [popover setModalPresentationStyle:UIModalPresentationPopover];
                [popover setPreferredContentSize:CGSizeMake(400.0f, 400.0f)];

                [[popover popoverPresentationController] setDelegate:self];
                [[popover popoverPresentationController] setPermittedArrowDirections:UIPopoverArrowDirectionAny];

                [[popover popoverPresentationController] setSourceRect:rect];
                [[popover popoverPresentationController] setSourceView:webView];

                [self presentViewController:popover animated:YES completion:nil];
            } else {
                [[self navigationController] pushViewController:details animated:YES];
            }
        } else {
            [[UIApplication sharedApplication] openURL:[[navigationAction request] URL] options:@{} completionHandler:^(BOOL success) { ; }];
        }
    }

    decisionHandler([navigationAction navigationType] >= 0 ? WKNavigationActionPolicyCancel : WKNavigationActionPolicyAllow);
}
...