Von dem, was ich gesehen habe, spielt UIWebView nicht gut mit anderen. Für Geste Erkenner, könnten Sie von JA versuchen Rückkehr:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer;
ich rückwärts kompatibel sein musste mit 3,0 so landete ich tun all die Geste mit Javascript in der UIWebView Handhabung. Keine gute Lösung, aber es hat für meine Bedürfnisse funktioniert. Ich war in der Lage, ein langes Drücken auf ein Element zu erfassen sowie zu tippen, zu wischen, zu klemmen und zu drehen. Natürlich habe ich nur lokale Inhalte verwendet.
Edit:
Sie in PhoneGap für ein Beispiel sehen können Nachrichten an den Delegierten des UIWebView zu senden. Auf dem Punkt gebracht, verwenden Sie document.location = "myscheme:mycommand?myarguments"
dann analysieren, den Befehl und Argumente aus diesem Delegaten Rückruf:
-(BOOL) webView:(UIWebView *)inWeb shouldStartLoadWithRequest:(NSURLRequest *)inRequest navigationType:(UIWebViewNavigationType)inType {
if ([[[inRequest URL] absoluteString] hasPrefix:@"myscheme:"]) {
//.. parse arguments
return NO;
}
}
Sie können im PhoneGap-Code sehen, dass sie eine Warteschlange und Timer eingerichtet, um die Nachrichten zu senden. Abhängig von Ihrer Verwendung müssen Sie möglicherweise dasselbe tun. Es gibt andere Fragen zu SO zu diesem Thema.
Hier ist die Event Handling Dokumentation. In meinem Fall habe ich Ereignis-Listener document
von <body onload="myloader();">
function myloader() {
document.addEventListener('touchcancel' , touch_cancel , false);
document.addEventListener('touchstart' , touch_start , false);
document.addEventListener('touchmove' , touch_move , false);
document.addEventListener('touchend' , touch_end , false);
};
Die tatsächliche Ereignisbehandlung viel hängt von Ihren Bedürfnissen. Jeder Ereignishandler erhält eine TouchEvent mit einer Berührungseigenschaft, wobei jedes Element eine Touch ist. Sie können die Startzeit und den Standort in Ihrem Touchstart-Handler aufzeichnen. Wenn die Berührungen zu weit gehen oder die falsche Zeit verstreicht, ist es keine lange Berührung.
WebKit versucht möglicherweise, eine lange Berührung zu handhaben, um eine Auswahl zu starten und zu kopieren. In Ihrem Event-Handler können Sie event.preventDefault();
verwenden, um das Standardverhalten zu stoppen. Ich fand auch die -webkit-user-select:none
CSS-Eigenschaft für einige Dinge nützlich.
var touch = {};
function touch_start(event /*TouchEvent*/ {
event.preventDefault();
touch = {};
touch.startX = event.touches.item(0).pageX;
touch.startY = event.touches.item(0).pageY;
touch.startT = (new Date()).getTime();
}
Dies ist nur das zweite Projekt, mit dem ich Javascript verwendet habe. Sie können anderswo bessere Beispiele finden.
Wie Sie sehen, ist dies keine schnelle Antwort auf Ihr Problem. Ich bin ziemlich glücklich mit den Ergebnissen, die ich bekommen habe. Der HTML-Code, mit dem ich gearbeitet habe, hatte keine interaktiven Elemente über einen oder zwei Links hinaus.
Danke, ich weiß nichts von Javascript; wärst du so freundlich, mir in die richtige Richtung zu zeigen, wie man einen Tipp in einem UIWebView über Javascript erkennt und eine Objective-C-Methode aufruft? Es würde mir nichts ausmachen, mit 3.0 kompatibel zu sein, wenn ich nicht auf iPad ziele. Für alle anderen, die nur 3,2+ interessieren, behob ich mein Problem, indem ich einfach eine transparente Ansicht direkt über dem UIWebView erstellte und die darin enthaltenen Abgriffe erkannte. – rscott
Dank dat arbeitete – user578386
Danke, es funktioniert gut –