iOSアプリのwebviewでinput[type=file]が正常に動作しない時

  • 15
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

背景

webviewベースのiOSアプリで画像upload機能をつくろうとしていた時の話

症状

html上に以下を記述。

<input type="file" name="image" accept="image/*"/>

ボタンをクリックすると以下の様なダイアログが表示され、
IMG_3575_Fotor.png
Cancel以外をクリックすると

Warning: Attempt to present <UIImagePickerController: 0x150b1200> on <YourViewController: 0x14d5bef0> whose view is not in the window hierarchy!

のようなメッセージとともにwebviewが初期化されてしまうというもの。

(再現環境: iOS8.4, iPhone 6)

解決方法

その一

http://stackoverflow.com/questions/25942676/ios-8-sdk-modal-uiwebview-and-camera-image-picker

-(void)dismissViewControllerAnimated:(BOOL)flag completion:(void (^)(void))completion
{
    if ( self.presentedViewController)
    {
        [super dismissViewControllerAnimated:flag completion:completion];
    }
}

当該Controllerに上記コードを仕込む。

その二

http://stackoverflow.com/questions/25898564/ios-8-0-uiwebview-file-input-crashes-my-app

<input type="file" name="image" accept="image/*" multiple/>

inputタグにmultiple属性をつける。
これだとそのままカメラで撮影した画像を利用することはできないが(上の画像で言う、Take Photoがない)、
サーバー側のhtmlの修正だけで取り急ぎ画像uploadできるようになったので今回はコチラを採用しました。