2015-09-20 9 views
12

Ich finde, dass in meiner App in iOS 9, wenn ich lange in einem UIWebView drücken, das Bearbeitungsmenü, das normalerweise erscheint nur die zweite (und folgende) mal, dass ich sehne Drücken Sie. Das erste Mal, wenn ich ein bestimmtes Webview länger drücke, wird überhaupt kein Menü angezeigt, obwohl die Auswahlgriffe angezeigt werden. Beim zweiten Mal, wenn ich ein beliebiges Webview länger drücke, verhält es sich wie erwartet. Ein weiteres merkwürdiges Symptom ist, dass gelegentlich (aber nicht jedes Mal), wenn das Menü erscheint, etwas das Verschieben nach links vom Bildschirm animiert, das aus dem Menü stammt, aber es ist zu schnell, um zu sehen, was es ist. Es passiert sogar, wenn das Bearbeitungsmenü so angezeigt wird, wie es sollte. Ich erwarte, dass dies mit dem Problem zusammenhängt.UIMenuController Bearbeitungsmenü in UIWebView erscheint nur zum zweiten Mal

Ich habe nur im Simulator getestet, weil ich iOS 9 noch nicht auf einem Gerät installiert habe.

In iOS 8 funktioniert das gleiche Menü wie erwartet.

Ein anderer Entwickler gab mir eine Arbeit, die möglicherweise funktioniert, wenn Sie nur ein UIWebVeiw auf dem Bildschirm haben. Setzen Sie dieses in viewDidAppear (Danke Chen Xian'an):

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

Da ich aber mehr als ein webView haben, ist es nicht eine ideale Lösung für mich. Und wenn ich es auf jedes Webview anwende, funktioniert es nur bei dem letzten, auf den ich es anwende.

Dies scheint ein Fehler zu sein, und hoffentlich wird Apple es bald beheben, hat in der Zwischenzeit jemand gute Ideen, wie ich das für mehr als ein WebView arbeiten könnte?

Antwort

16

Ich versuchte auf diese Weise, und mir gelang es. Erste Sie müssen benutzerdefinierte UIWebView und schreiben

- (BOOL)canBecomeFirstResponder { 
    return YES; 
} 

Zweite Sie diese Methoden vor anrufen müssen Ihre lange drücken

[yourWebView becomeFirstResponder]; 

behandeln ich hoffe, dass es helfen würde ..

+0

Arbeitete für mich. Siehe auch diesen Apple Dev Forum Beitrag, den ich gemacht habe, um Informationen zu sammeln: https://forums.developer.apple.com/thread/23353 –

2

In meinem Fall die Problem, das das UIWindow war, wo das UIWebView anscheinend nicht das Schlüsselfenster war. Was ich getan habe, um es zu lösen, war einen Aufruf von [webView.window makeKeyAndVisible] an der Methode webViewDidFinishLoad hinzuzufügen.

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