美文网首页
利用 runtime 监听 WKWebView 打开相册

利用 runtime 监听 WKWebView 打开相册

作者: ztx_xtz | 来源:发表于2018-08-04 18:22 被阅读0次

项目里用 WKWebview 加载的 H5 里面有个头像上传的功能,H5使用了 <input type=file> 标签,可以不经过 iOS 原生处理就能直接打开相机或相册文件选取图片。现在的需求是要原生得到用户选择的图片后进行裁剪,把裁剪后的图片交给 H5 中显示。而 WKWebview 代理并没有提供相关的方法,从网上找到一种解决方法,具体可以看这篇帖子,说的挺详细的。
这里说说遇到的问题,在使用这个帖子的方法的时候,由于webview 放在了 navigationcontroller 里面,最后在自己实现弹出视图的时候方法调取不到。所以要加个判断,代码如下:

- (void)onFileInputIntercept {
    //  当根视图为 UINavigationController 时,需要取出 navigation 对应的控制器
    //  获取 window
    UIWindow *mainWindow = [AppDelegate sharedAppDelegate].window;
    //  如果以导航控制器作为根控制器
    if ([mainWindow.rootViewController isKindOfClass:[UINavigationController class]]) {
        __block NSInteger   index;
        [mainWindow.rootViewController.childViewControllers enumerateObjectsUsingBlock:^(__kindof UIViewController * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
            //  RootViewController 就是放了 webview 的 controller
            if ([obj isKindOfClass:[RootViewController class]]) {
                //  得到对应的控制器在导航控制器中的位置
                index = idx;
            }
        }];
        //  取出对应的控制器来实现方法
        UIViewController *vc = [mainWindow.rootViewController.childViewControllers objectAtIndex:index];
        if ([vc respondsToSelector:@selector(onFileInputClicked)]) {
            [vc performSelector:@selector(onFileInputClicked)];
        }
    }
}

判断完之后,就可以做之后的操作了。

相关文章

网友评论

      本文标题:利用 runtime 监听 WKWebView 打开相册

      本文链接:https://www.haomeiwen.com/subject/kjvcvftx.html