PresentViewController не вызывается, когда веб-просмотр представляет ImagePicker

Я видел пару вопросов, которые ускользают от функции 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];
}
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
399
2

Ответы 2

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.

Пара вещей, когда я использую WKWebview, у моего контроллера imagepicker нет кнопки «Готово», поэтому я вернулся к uiwebview, WKWebview также имеет кучу проблем с файлами cookie и не удерживает моего пользователя в системе. Во-вторых, отображается UIDoucmentController когда вы представляете 2 варианта, то после щелчка по библиотеке фотографий отображается средство выбора изображений. Функция переопределения presentViewController никогда не вызывается, когда <input type = "file"> щелкают через uiwebview.

Travis Delly 10.08.2018 02:17

UIWebView уходит. Вам нужно найти способ работы с WKWebView. Что касается вызова, вы не видите его, когда выбираете, потому что он вызывается в UIDocumentMenuViewController, а не в вашем VC. YourVC представляет UIDocumentMenuViewController, который представляет UIImagePickerController.

David S. 10.08.2018 19:13

Событие будет вызываться в вашем ROOT-представлении, которое может быть вашим WebViewController, а может и не быть. Используйте инспектор макета, чтобы найти корневое представление, или извлеките корневое представление программно из делегата приложения.

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