2011-08-23 36 views
11

Làm cách nào để vô hiệu hóa kính lúp xuất hiện khi bạn giữ liên lạc trên UIWebView? Tôi không muốn vô hiệu hóa tương tác của người dùng nhưng tôi không muốn webview hiển thị kính thu phóng đó. Bất kỳ ý tưởng?Cách tắt kính lúp trong UIWebview?

+0

Bạn vẫn muốn chạm vào chế độ xem web? – Satyam

Trả lời

8

Không, kính lúp được liên kết chặt chẽ với lựa chọn. Để vô hiệu hóa nó, bạn sẽ phải vô hiệu hóa lựa chọn hoàn toàn (bạn có thể sử dụng -webkit-user-select: none để làm điều đó).

+4

Thật không may, điều này không làm việc cho tôi. –

+1

nếu đầu vào/văn bản được lấy nét và làm mờ mà không cần người dùng chạm vào "Xong" trên bàn phím, mẹo này sẽ không hoạt động nữa. (iOS 7) – vilicvane

3

Vì tôi không biết cách sử dụng -webkit-user-select: none Tôi đã tìm các cách khác. Và tôi vấp ngã vào số Customize the contextual menu of UIWebView sau đó tôi kết hợp nó với -webkit-user-select: none.

- (void)webViewDidFinishLoad:(UIWebView *)webView 
{ 
    [webView stringByEvaluatingJavaScriptFromString:@"document.body.style.webkitUserSelect='none';"]; 
} 
+1

'-webkit-user-select: none' là thuộc tính CSS. Vì vậy, bạn cần phải sử dụng mã mà bạn đã đăng hoặc nếu bạn có quyền truy cập vào nội dung web được hiển thị trong chế độ xem web của mình, bạn sẽ bao gồm nó với CSS của mình. – Ben

7

Bởi vì các giải pháp chấp nhận không làm việc cho tôi, tôi đã phải tìm kiếm các lựa chọn khác và tôi thấy một.
Lưu ý rằng tôi không biết liệu Apple có chấp thuận kỹ thuật này hay không. Sử dụng nó vì sợ hãi và rủi ro của riêng bạn.

(Chúng ta đã không từ chối; Tôi không nghĩ rằng Apple quan tâm nhiều về bạn rối tung với UIWebView internals, nhưng được cảnh báo.)

Những gì tôi đã làm được một cách đệ quy đi bộ xuống UIWebView subviews và liệt kê gestureRecognizers của họ. Bất cứ khi nào tôi gặp phải một số UILongPressGestureRecognizer, tôi đặt enabled thành NO.

Điều này sẽ loại bỏ hoàn toàn kính lúp và rõ ràng sẽ tắt mọi chức năng báo chí dài mặc định.

Có vẻ như iOS bật lại (hoặc tạo lại) các trình nhận dạng cử chỉ này bất cứ khi nào người dùng bắt đầu chỉnh sửa văn bản.
Vâng, tôi không ngại sử dụng kính lúp trong các trường văn bản để tôi không tắt chúng ngay lập tức.

Thay vào đó, tôi đợi blur sự kiện trên các yếu tố văn bản của mình và khi nó xảy ra, tôi lại đi lại cây con.
Đơn giản như vậy và hoạt động.

+0

Cái quái gì với downvote? Có điều gì sai với các giải pháp làm tài liệu đã làm việc thành công cho chúng tôi không? –

+0

Điều này nghe có vẻ hợp pháp với tôi. – mark

+0

Bất kỳ mã nào trong plz nhanh? –

2

Tôi nhận thấy rằng chỉ riêng -webkit-user-select: none; không thực hiện được thủ thuật. Thay vào đó tôi đã tìm thấy một tài sản khá không có giấy tờ -webkit-touch-callout

Những gì tôi thường làm với các ứng dụng PhoneGap là thế này:

body, body * { 
    -webkit-user-select: none !important; 
    user-select: none !important; 
    -webkit-user-callout: none !important; 
    -webkit-touch-callout: none !important; 
} 
input, textarea { 
    -webkit-user-select: text !important; 
    user-select: text !important; 
    -webkit-user-callout: default !important; 
    -webkit-touch-callout: default !important; 
} 

Một nơi nào đó nó đã được đề cập rằng -webkit-user-callout là một phiên bản cũ của -webkit-touch-callback, tôi đã đặt này chỉ trong vòng trong trường hợp.

+0

Không hoạt động trong ứng dụng Phonegap. Tôi đã thử nó với mỗi và mỗi div –

+0

@ Mo.Ashfaq phiên bản iOS nào bạn thử nghiệm với? –

+0

ios8, trong iphone 5s. Thông tin bổ sung là tôi có một số yếu tố như h2, img trong div của tôi và tôi đã áp dụng giải pháp này cho từng phần tử. –

0

Đối với dự án Swift Cordova & chúng ta, tôi đã làm:

override init!(webView theWebView: UIWebView!) 
    {    
     super.init(webView: theWebView) 

     removeLoupe() 
    } 

    /** 
     Removes the magnifying glass by adding a long press gesture that overrides the inherent one that spawns 
     a the loupe by default. 
    */ 
    private func removeLoupe() 
    { 
     let views = webView?.subviews 
     if (views == nil || views?.count == 0) 
     { 
      return 
     } 

     let longPress = UILongPressGestureRecognizer(target: self, action: "handleLongPress:") 
     longPress.minimumPressDuration = 0.045 
     longPress.allowableMovement = 100.0 

     for view in views! 
     { 
      if (view.isKindOfClass(UIScrollView)) 
      { 
       let subViews = view.subviews 
       let browser = subViews[0] 
       browser.addGestureRecognizer(longPress) 
       break; 
      } 
     } 
    } 

    /** 
     Hack to override loupe appearence in webviews. 
    */ 
    func handleLongPress(sender:UILongPressGestureRecognizer) 
    { 

    } 

Lưu ý rằng đây là lớp CDVPlugin của tôi (hay đúng hơn là phiên bản tùy chỉnh của tôi của nó).

đảm bảo tệp config.xml của bạn có:

<feature name="CustomCDVPlugin"> 
    <param name="ios-package" value="CustomCDVPlugin" /> 
    <param name="onload" value="true" /> 
</feature> 

này sẽ đảm bảo các phương pháp init() được gọi.

Các vấn đề liên quan