Меню редактирования 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 скоро исправит ее, тем не менее у кого-нибудь есть какие-то яркие идеи о том, как я могу сделать эту работу более чем для одного webView?
Ответы
Ответ 1
Я попытался таким образом, и мне это удалось.
Первый
Вы должны настраивать UIWebView и писать
- (BOOL)canBecomeFirstResponder {
return YES;
}
Во-вторых
Вы должны вызвать эти методы, прежде чем обращаться с длинным нажатием
[yourWebView becomeFirstResponder];
Я надеюсь, что это поможет..
Ответ 2
В моем случае проблема, которая была UIWindow, где UIWebView, по-видимому, не является ключевым окном. Что я сделал для решения этой проблемы, так это добавить вызов [webView.window makeKeyAndVisible] по методу webViewDidFinishLoad.
- (void)webViewDidFinishLoad:(UIWebView *)webView {
// Fix
[webView.window makeKeyAndVisible];
}