Я видел пару вопросов, которые ускользают от функции presentViewController:(UIViewController *)viewControllerToPresent animated:(BOOL)flag completion:(void (^)(void))completion{, которая должна вызываться, когда отображается imagepicker из-за того, что UIWebView вызывает его.
Вот мой код.
- (void)presentViewController:(UIViewController *)viewControllerToPresent animated:(BOOL)flag completion:(void (^)(void))completion{
if ([viewControllerToPresent.class isEqual:[UIImagePickerController class]]){
UIImagePickerController *controller = (UIImagePickerController*)viewControllerToPresent;
controller.navigationBar.tintColor = UIColor.whiteColor;
[controller.navigationBar setTitleTextAttributes:
@{NSForegroundColorAttributeName:[UIColor whiteColor]}];
[controller.navigationBar setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault];
[controller.navigationBar setBarTintColor:[UIColor blackColor]];
}
[super presentViewController:viewControllerToPresent animated:flag completion:completion];
}





ViewController, содержащий ваше веб-представление, вызовет этот метод, когда вы используете тег <input type = "file"> в своем веб-представлении и нажмете получившуюся кнопку.
Этот метод уже реализован в UIViewController, но если вы хотите переопределить его, вы можете сделать это в своем подклассе UIViewController. Быстро:
override func present(_ viewControllerToPresent: UIViewController, animated flag: Bool, completion: (() -> Void)? = nil) {
super.present(viewControllerToPresent, animated: flag, completion: completion)
}
В Objective-C:
- (void)presentViewController:(UIViewController *)viewControllerToPresent animated:(BOOL)flag completion:(void (^)(void))completion {
[super presentViewController:viewControllerToPresent animated:flag completion:completion];
}
Стоит отметить, что контроллер, представленный, когда я тестирую это на симуляторе iOS11, не является UIImagePickerController, а на самом деле UIDocumentMenuViewController, поэтому ваш пользовательский код выше не будет работать.
Также, как примечание, вам больше не следует использовать UIWebView. Вместо этого вы должны использовать WKWebView.
UIWebView уходит. Вам нужно найти способ работы с WKWebView. Что касается вызова, вы не видите его, когда выбираете, потому что он вызывается в UIDocumentMenuViewController, а не в вашем VC. YourVC представляет UIDocumentMenuViewController, который представляет UIImagePickerController.
Событие будет вызываться в вашем ROOT-представлении, которое может быть вашим WebViewController, а может и не быть. Используйте инспектор макета, чтобы найти корневое представление, или извлеките корневое представление программно из делегата приложения.
Пара вещей, когда я использую WKWebview, у моего контроллера imagepicker нет кнопки «Готово», поэтому я вернулся к uiwebview, WKWebview также имеет кучу проблем с файлами cookie и не удерживает моего пользователя в системе. Во-вторых, отображается UIDoucmentController когда вы представляете 2 варианта, то после щелчка по библиотеке фотографий отображается средство выбора изображений. Функция переопределения presentViewController никогда не вызывается, когда <input type = "file"> щелкают через uiwebview.