項目里用 WKWebview 加載的 H5 里面有個頭像上傳的功能权逗,H5使用了 <input type=file> 標簽屈梁,可以不經(jīng)過 iOS 原生處理就能直接打開相機或相冊文件選取圖片。現(xiàn)在的需求是要原生得到用戶選擇的圖片后進行裁剪,把裁剪后的圖片交給 H5 中顯示姊氓。而 WKWebview 代理并沒有提供相關的方法,從網(wǎng)上找到一種解決方法喷好,具體可以看這篇帖子翔横,說的挺詳細的。
這里說說遇到的問題梗搅,在使用這個帖子的方法的時候禾唁,由于webview 放在了 navigationcontroller 里面效览,最后在自己實現(xiàn)彈出視圖的時候方法調(diào)取不到。所以要加個判斷荡短,代碼如下:
- (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;
}
}];
// 取出對應的控制器來實現(xiàn)方法
UIViewController *vc = [mainWindow.rootViewController.childViewControllers objectAtIndex:index];
if ([vc respondsToSelector:@selector(onFileInputClicked)]) {
[vc performSelector:@selector(onFileInputClicked)];
}
}
}
判斷完之后,就可以做之后的操作了掘托。