WKWebView не отображает настраиваемую конфигурацию UIContextMenuConfiguration для изображений

Я пытаюсь создать собственное контекстное меню для своего WKWebView на iOS 13. Я могу переопределить контекстное меню по умолчанию для обычных ссылок, однако, когда я нажимаю и удерживаю изображение, отображается контекстное меню по умолчанию.

Вот код, который у меня есть:

-(void) webView:(WKWebView *)webView 
contextMenuConfigurationForElement:(WKContextMenuElementInfo *)elementInfo 
completionHandler:(void (^)(UIContextMenuConfiguration *configuration))completionHandler {
    NSURL *url = elementInfo.linkURL;
    __block BOOL isURLImage;
    __block UIImage *image;
    if (url != nil) {
        UIAction *openURL = [UIAction actionWithTitle:@"Open URL" image:nil identifier:nil handler:^(UIAction *action) {
            [self.webView loadRequest:[NSURLRequest requestWithURL:url]];
        }];
        UIAction *openNewTab = [UIAction actionWithTitle:@"Open in new tab" image:nil identifier:nil handler:^(UIAction *action) {
            [self createNewTab:url];
        }];

        dispatch_async(dispatch_queue_create("getImage", NULL), ^(void) {
            NSData *data = [NSData dataWithContentsOfURL:url];
            image = [UIImage imageWithData:data];
            if (image == nil) {
                dispatch_async(dispatch_get_main_queue(), ^{
                    UIContextMenuConfiguration *menuconfig = nil;
                    menuconfig = [UIContextMenuConfiguration configurationWithIdentifier:nil previewProvider:nil actionProvider:^(NSArray *suggestedAction) {
                        suggestedAction = nil;
                        return [UIMenu menuWithTitle:@"" children:@[openURL, openNewTab]];
                    }];
                    completionHandler(menuconfig);
                });
            }
            else {
                dispatch_async(dispatch_get_main_queue(), ^{
                    UIAction *saveImage = [UIAction actionWithTitle:@"Save image" image:nil identifier:nil handler:^(UIAction *action) {
                        [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
                            PHAssetChangeRequest *assetRequest;
                            assetRequest = [PHAssetChangeRequest creationRequestForAssetFromImage:image];
                        } completionHandler:^(BOOL success, NSError *error) {
                        }];
                    }];
                    UIContextMenuConfiguration *menuconfig = nil;
                    menuconfig = [UIContextMenuConfiguration configurationWithIdentifier:nil previewProvider:nil actionProvider:^(NSArray *suggestedAction) {
                        suggestedAction = nil;
                        return [UIMenu menuWithTitle:@"" children:@[openURL, openNewTab, saveImage]];
                    }];
                    completionHandler(menuconfig);
                });
            }
        });
    }
    else {
        completionHandler(nil);  
    }
}

Любая помощь будет принята с благодарностью.

0 ответов

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