Подтвердить что ты не робот

Меню редактирования 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?

4b9b3361

Ответ 1

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

- (BOOL)canBecomeFirstResponder {
    return YES;
}

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

[yourWebView becomeFirstResponder];

Я надеюсь, что это поможет..

Ответ 2

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

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