Ich versuche, die Textauswahlfarbe in WKWebView
zu ändern. Ich habe so ziemlich alle vorgeschlagenen Lösungen für UIWebView
/ WKWebView
ausprobiert, die ich finden konnte.
Das Ändern der Tönungsfarbe funktioniert nicht. Die Anwendung von CSS für ::selection
, -webkit-tap-highlight-color
Tags funktioniert auch nicht.
Es ist immer blau. Ist es möglich, es zu ändern?
Hier ist der Beispielcode dafür.
%Vor%rufen Sie diese Methode mit dem Objective-C-Code
auf %Vor%Hier ist meine Aufnahme auf private WebKit API hacky swizzling offensichtlich nicht geeignet für eine AppStore App. Apple bietet dafür eine Menge Open-Source-Code: Ссылка Ссылка
Die eigentliche Auswahlhighlight für HTML-Inhalt passiert also in 2 Phasen. Bis der Tipp auf dem Touchscreen gehalten wird, wird private Klasse UIWKSelectionView
angezeigt. Das Highlight ist die Eigenschaft tintView
. Jeder% code_de% Getter-Aufruf generiert eine neue tintView
-Instanz mit der Markierungsfarbe als Hintergrund. Daher muss die Überschreibung nach jedem Zugriff erfolgen.
In der zweiten Phase (nachdem der Benutzer den Tap freigibt) wird der ausgewählte Bereich durch private class UIView
dargestellt. Die vertikalen Textmarkierungen mit Punkten sind UIWebTextRangeView
. Die Hervorhebung erfolgt in der Methode UIWebDragDotView
, die vor dem Überschreiben der Farbe aufgerufen werden muss.
Die endgültige Lösung ist validiert für iOS 8 - 11 . Sobald die Farbe überschrieben wird, wirkt sich dies auf alle Instanzen von updateRectViews
aus. Die ursprüngliche Highlight-Farbe ist in WKWebView
& amp; UIWKSelectionView
und abgerufen über die private Methode UIKit UIWebTextRangeView
, die +[UIColor selectionHighlightColor]
ergibt.
Der eigentliche Code (Ich wählte RGBA 0 0.33 0.65 0.2
für den Swizzling-Komfort, aber dies könnte auch in obj-c
geschehen):
Tags und Links objective-c ios webkit swift wkwebview