2011-04-01 44 views
6

gösteren Kopyala/Yapıştır/a UIWebView nesnesi olarak anlatılır içindekiler Kes. Bunu başarmak için, bir UIWebView alt sınıfı oluşturulan ve - (BOOL)canPerformAction:(SEL)action withSender:(id)sender yöntemi overrode: Aşağıdaki görebileceğiniz gibiUIWebView ben devre dışı bırakmak istediğiniz belgeleri benim App

#pragma mark - UIResponderStandardEditActions 

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender {  
    if (action == @selector(copy:) || 
     action == @selector(paste:)|| 
     action == @selector(cut:)) { 
     return _copyCutAndPasteEnabled; 
    } 

    return [super canPerformAction:action withSender:sender]; 
} 

Şimdi artık bu tür operasyonları yapabilir kullanıcı Ancak UIWebView hala "seçim dikdörtgeni" gösterir ekran görüntüsü:

Selection rectangle

NOT: içerik UIWebView gösterdi edilen HTML sayfaları değildir. Ben kullanarak bir dosyadan yüklenen belge dosyaları (PDF, DOC, PPT), gösteriyorum:

NSURL *fileURL = [NSURL fileURLWithPath:<document file path..>]; 
NSURLRequest *fileRequest = [NSURLRequest requestWithURL:fileURL]; 
[<uiwebView> loadRequest:fileRequest]; 

devre dışı bırakmak için herhangi bir yolu var mı/de bu seçim dikdörtgeni özelliğini gizlemek? [] S

,

+1

Başka kimsenin aynı (veya benzer) içeriği sağlamadığından% 100 emin değilseniz, bu "özellik" yalnızca kullanıcıları uygulamanızdan uzaklaştırmaya hizmet eder. –

+0

@Franci Penov: Bir kullanıcının seçim işaretçisinin görünmesini istemediği birçok durumu düşünebilirim. Aslında, bir şeyleri okurken ve yavaşça kaydırarak (parmak aşağı tutarak, okurken, sürükleyerek, sonlandırmayı seçtiğimde ancak kaydırma yapmak istediğimde) kullanıcı deneyimimle sık sık karşılaşıyorum. – Kalle

+0

@Franci: Bu içeriğin kimsenin sağlayamayacağından% 100 eminim. Uygulama, belirli herkese açık olan içeriği göstermek için oluşturulmaktadır. Bu "özellik" bir müşterinin gereksinimidir (aksi takdirde kesinlikle bununla uğraşmak istemem.) @Kalle: Size tamamen katılıyorum. –

cevap

14

Sen Web görünümü içine javascript enjekte deneyebilirsiniz. Bu kod iPhone'da da çalışır ancak sadece sayfa tam olarak yüklendiğinde. http://www.javascriptsource.com/page-details/disable-text-selection.html veya http://solidlystated.com/scripting/proper-way-to-disable-text-selection-and-highlighting/

seçme aşamasına başlayacak tıpkı devre dışı bırakarak javascript enjekte nerede proably buna benzer bir kurulum kullanmak gerekecektir sizi yüklerken hala sayfa sadece yarısı yüklendiğinde düzgün çalışması için almak ya etmek . http://www.icab.de/blog/2010/07/11/customize-the-contextual-menu-of-uiwebview/

Bunun işe yarayabileceğini düşünebileceğim son bir şey var, selector @selector (devre dışı seçmenler listesine :) seçeneğini eklemeyi test ettiniz mi?

DÜZENLEME: yerine bir PDF görüntülemek için sana ne kadar Tamam o html sayfası bu deneyebilirsiniz.

Kur

bir scrollview içinde Web Görünümü koyun;

Set scrollview en: Kendine temsilci; min yakınlaştırmak için 1.0 ve maksimum zoom; weView sonra

yüklenmesi tamamlandıktan. Web görünümü ilk UIScrollView için Tarama, (o yüzden bu daha sonra iOS sürümleri üzerinde kırmak olmamalıdır biz taradığınız). UIWebViews çerçevesini scrollViews boyutuna ayarlayın. Ve WebViews'teki contentSize için scrollview en contentSize set (ya artık, o çerçeve var).

-(void)setup{ 
    //Get the webView's first scrollView (the one all the content is in). 
    UIScrollView *webViewContentView; 
    for (UIView *checkView in [webView subviews]) { 
     if ([checkView isKindOfClass:[UIScrollView class]]) { 
      webViewContentView = (UIScrollView*)checkView; 
      break; 
     } 
    } 

    webView.frame = CGRectMake(0, 0, webViewContentView.contentSize.width, webViewContentView.contentSize.height); 
    scrollView.contentSize = webViewContentView.contentSize; 
    scrollView.delegate = self; 
} 

Yakınlaştırmayı etkinleştirmek için, scrollViews temsilcisinden ek bir yöntem eklemeniz gerekir.

-(UIView *) viewForZoomingInScrollView:(UIScrollView *)scrollView { 
    return webView; 
} 

Ve örnek bir proje http://www.multiupload.com/P8SOZ4NW6C (Bu bir xcode 4 proje) indirebilirsiniz.

NOTLAR: 'webView şeyleri yeniden işlemek için bilmiyor çünkü çok yakınlaştırmak ise yakınlaştırma WebView içeriğini pixelates ve bağlantıları tıklayın (ama olamaz çünkü bir PDF olduğunu olmamalı sorun değil).

DÜZENLEME 2: Daha iyi yöntem

bu yazma beri ben de pikselleşme sorunu çözmek gerekir daha basit ve daha kolay bir yöntem, anlamışlardır.

-(void)removeInput{ 
    UIScrollView *webViewContentView; 
    for (UIView *checkView in [webView subviews]) { 
    if ([checkView isKindOfClass:[UIScrollView class]]) { 
     webViewContentView = (UIScrollView*)checkView; 
      break; 
     } 
    } 

    for (UIView *checkView in [webViewContentView subviews]) { 
     checkView.userInteractionEnabled = NO; 
    } 
} 
Şimdi

sadece yakınlaştırma, kaydırma, vb .. hala çalışması gerekir (ve yakınlaştırabileceğiniz zaman sayfa Pixelating ziyade yeniden oluşturulması gerekir) anlamına gelen UIScrollView kendisi ile etkileşim mümkün olmalıdır ancak 'can t herhangi bir metni seçin veya herhangi bir şey yazın. Bu yöntem hakkında da

şey o this list of UIWebView subViews dayalı bunu ayarlamak mümkün olabilir edilir sayfası, sayfa yüklenirken bittikten sonra ziyade yükleme başlamadan önce.

+1

Cevabınız için minnettarım, bu UIWebView'da HTML sayfaları gösterildiğinde işe yarıyor gibi görünüyor. Sanırım soruma yeterince açık değildim (bunu düzenleyeceğim). UIWebView'da görüntülenen içerikler PDF, DOC, PPT, XLS dosyalarıdır (sadece bir dosyadan yüklenecek bir URLRequest hazırlarımdır.) –

+0

Deneyin/kullanabileceğiniz/deneyebileceğiniz başka bir yöntem, içerik görünümünün boyutunu elde etmektir. UIWebView, webViews boyutunun webView üzerindeki userInteraction işlevini devre dışı bırakması ve webViews boyutuna ayarlanan contentSize ile bir UIScrollView öğesine eklenmesi durumunda, daha fazla ayrıntıyla başka bir yanıt yazacağım. –

+0

Bu benim sorunumun çözümü gibi görünüyor. Bunu yazmayı başarabilirdim, ancak yapabiliyorsanız, uygulamanızı görmek ve cevap olarak kabul etmek isterim. Teşekkürler. –

İlgili konular