Меню редактирования UIMenuController в UIWebView появляется только во второй раз

Я обнаружил, что в моем приложении в iOS 9, когда я долго нажимаю в UIWebView, меню редактирования, которое обычно появляется, появляется только во второй (и последующие) раз, когда я долго нажимаю. В первый раз, когда я долго нажимаю в любом конкретном веб-просмотре, меню вообще не отображается, хотя появляются маркеры выбора. Во второй раз, когда я долго нажимаю в любом конкретном веб-просмотре, он ведет себя так, как ожидалось.

Еще один странный симптом заключается в том, что иногда (но не каждый раз) при появлении меню что-то быстро оживляет скольжение влево по экрану, происходящее из меню, но слишком быстро, чтобы увидеть, что это такое. Это происходит даже тогда, когда меню редактирования появляется как надо. Я ожидаю, что это связано с проблемой.

Я тестировал только в симуляторе, потому что еще не установил iOS 9 на устройство.

В iOS 8 это же меню работает как положено.

Другой разработчик дал мне обходной путь, который может работать, когда у вас на экране только один UIWebVeiw. Поместите это в viewDidAppear (спасибо Chen Xian'an):

[[myWebView.scrollView.subviews firstObject]   becomeFirstResponder];  
[[NSOperationQueue mainQueue] addOperationWithBlock:^{  
    [self becomeFirstResponder];  
}];  

Однако, поскольку у меня более одного webView, это не идеальное решение для меня. И если я применяю его к каждому веб-просмотру, он работает только с последним, к которому я его применяю.

Похоже, это ошибка, и, надеюсь, Apple скоро ее исправит, а пока есть ли у кого-нибудь яркие идеи относительно того, как я могу заставить это работать для более чем одного веб-представления?


person narco    schedule 20.09.2015    source источник


Ответы (2)


Я пробовал таким образом, и у меня получилось. Сначала вы должны настроить UIWebView и написать

- (BOOL)canBecomeFirstResponder {
    return YES;
}

Во-вторых, вы должны вызвать эти методы, прежде чем обрабатывать долгое нажатие.

[yourWebView becomeFirstResponder];

надеюсь поможет..

person iGuan7u    schedule 12.10.2015
comment
Работал на меня. Также см. этот пост на форуме разработчиков Apple, который я сделал для сбора информации: forums.developer.apple.com/thread /23353 - person Mike Weller; 20.10.2015

В моем случае проблема заключалась в UIWindow, где UIWebView, по-видимому, не был ключевым окном. Чтобы решить эту проблему, я добавил вызов [webView.window makeKeyAndVisible] в методе webViewDidFinishLoad.

- (void)webViewDidFinishLoad:(UIWebView *)webView {
    // Fix
    [webView.window makeKeyAndVisible];
}
person Leo137    schedule 03.03.2016