Từ những gì tôi đã thấy, UIWebView không hoạt động tốt với người khác. Đối với công cụ nhận dạng cử chỉ, bạn có thể thử trả lại CÓ từ:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer;
Tôi phải tương thích ngược với 3.0 vì vậy tôi đã thực hiện tất cả xử lý cử chỉ bằng Javascript bên trong UIWebView. Không phải là một giải pháp tốt, nhưng nó làm việc cho nhu cầu của tôi. Tôi đã có thể chụp một báo dài trên một phần tử, cũng như chạm, vuốt, chụm và xoay. Tất nhiên, tôi chỉ sử dụng nội dung địa phương.
Edit:
Bạn có thể tìm trong PhoneGap cho một ví dụ về việc gửi tin nhắn đến các đại biểu của UIWebView. Tóm lại, bạn sử dụng document.location = "myscheme:mycommand?myarguments"
sau đó phân tích ra các lệnh và đối số từ callback delegate này:
-(BOOL) webView:(UIWebView *)inWeb shouldStartLoadWithRequest:(NSURLRequest *)inRequest navigationType:(UIWebViewNavigationType)inType {
if ([[[inRequest URL] absoluteString] hasPrefix:@"myscheme:"]) {
//.. parse arguments
return NO;
}
}
Bạn có thể thấy trong các mã PhoneGap rằng họ thiết lập một hàng đợi và hẹn giờ để gửi tin nhắn. Tùy thuộc vào cách sử dụng của bạn, bạn có thể cần phải làm điều tương tự. Có những câu hỏi khác về SO về chủ đề này.
Đây là tài liệu Event Handling. Trong trường hợp của tôi, tôi thêm thính giả sự kiện để document
từ <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);
};
Việc xử lý sự kiện thực tế phụ thuộc rất nhiều vào nhu cầu của bạn. Mỗi trình xử lý sự kiện sẽ nhận được một TouchEvent với thuộc tính chạm, trong đó mỗi mục là Touch. Bạn có thể ghi lại thời gian bắt đầu và vị trí trong trình xử lý cảm ứng của bạn. Nếu chạm di chuyển đến xa hoặc sai số lượng thời gian vượt qua nó không phải là một liên lạc dài.
WebKit có thể cố gắng xử lý một lần chạm dài để bắt đầu lựa chọn và sao chép. Trong trình xử lý sự kiện của bạn, bạn có thể sử dụng event.preventDefault();
để dừng hành vi mặc định. Tôi cũng tìm thấy thuộc tính css -webkit-user-select:none
tiện dụng cho một số thứ.
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();
}
Đây chỉ là dự án thứ hai tôi đã sử dụng javascript với. Bạn có thể tìm thấy các ví dụ tốt hơn ở nơi khác.
Như bạn có thể thấy đây không phải là câu trả lời nhanh cho vấn đề của bạn. Tôi khá hài lòng với kết quả tôi nhận được. Html tôi đã làm việc với không có yếu tố tương tác ngoài một hoặc hai liên kết.
Cảm ơn, tôi không biết gì về Javascript; bạn sẽ được như vậy loại để chỉ cho tôi đi đúng hướng trên làm thế nào để phát hiện một vòi nước trong một UIWebView thông qua Javascript và gọi một Objective-C phương pháp? Tôi sẽ không nhớ tương thích với 3.0 cho mục tiêu không phải iPad. Đối với bất kỳ người nào khác chỉ quan tâm đến 3,2+, tôi đã khắc phục sự cố của mình bằng cách chỉ cần tạo chế độ xem trong suốt ngay trên đầu UIWebView và phát hiện các thao tác nhấn trong đó. – rscott
Cảm ơn bạn đã làm việc – user578386
Cảm ơn bạn, nó hoạt động tốt –