2011-04-01 5 views
6

내 응용 프로그램에서는 UIWebView 개체가 표시하는 내용의 복사/붙여 넣기/잘라 내기를 비활성화하려고합니다. 이를 위해, 내가있는 UIWebView 하위 클래스를 생성하고 - (BOOL)canPerformAction:(SEL)action withSender:(id)sender 방법을 오버라이드 : 다음에서 볼 수 있듯이문서를 표시 할 때 복사/붙여 넣기 및 선택 사각형이없는 UIWebView

#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]; 
} 

이제 더 이상 이러한 작업을 할 수 있습니다 사용자가, 그러나있는 UIWebView는 여전히 "선택 사각형을"보여줍니다 스크린 샷 :

Selection rectangle

참고 : 내용이있는 UIWebView에서 보여되고있는 HTML 페이지가 아닙니다. 내가 사용하여 파일에서로드 문서 파일 (PDF, DOC, PPT)를 보여주는 해요 :

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

하지 않으려면 어떤 방법이 있나요 /도이 선택 사각형 기능을 숨기기?

[] s,

+1

다른 사람이 동일한 (또는 비슷한) 콘텐츠를 제공하는 사람이 누구도 확신하지 않는 한이 "기능"은 사람들을 앱에서 멀리 몰아내는 역할 만합니다. –

+0

@ Franci Penov : 사용자가 선택 포인터를 나타나지 않게하려는 많은 경우를 생각해 볼 수 있습니다. 실제로, 뭔가를 읽고 천천히 스크롤 할 때 (손가락을 내려 놓고, 읽고, 드래그하고, 결국 선택하지만 스크롤을 원할 때) 사용자 경험으로 종종 엉망이됩니다. – Kalle

+0

@Franci : 나는 아무도 그런 내용을 제공하지 않을 것입니다. 앱은 특정 공개로 제한된 콘텐츠를 표시하기 위해 만들어졌습니다. 이 "기능"은 고객의 요구 사항입니다. 그렇지 않으면 확실히 그 점을 신경 쓰지 않을 것입니다. @Kalle : 전적으로 의견에 동의합니다. –

답변

14

자바 스크립트를 webView에 삽입해볼 수 있습니다. 이 코드는 iPhone에서도 작동하지만 페이지가 완전히로드 된 경우에만 작동합니다. http://www.javascriptsource.com/page-details/disable-text-selection.html 또는 http://solidlystated.com/scripting/proper-way-to-disable-text-selection-and-highlighting/

은 선택 시작하는 것처럼 당신이 해제 자바 스크립트를 주입 곳 proably이 비슷한 설정을 사용해야합니다 당신을로드 여전히 페이지가 절반을로드 할 때 제대로 작동하도록하려면 또는 . http://www.icab.de/blog/2010/07/11/customize-the-contextual-menu-of-uiwebview/

마지막으로 생각한 것 중 하나가 선택기 @selector (select :)를 비활성화 된 선택기 목록에 추가하여 테스트 했습니까?

편집 : 그래, HTML 페이지가 아닌 PDF를 표시하려면 어떻게해야할까요?

설정

있는 ScrollView에 웹뷰를 넣어;

ScrollView의 : delegate을 self로 설정합니다. 1.0으로 확대/축소하고 원하는대로 최대 확대/축소합니다.

weView로드가 끝난 후. webView에서 첫 번째 UIScrollView를 검색합니다 (우리는 스캔하여 iOS 버전 이후에 중단되지 않아야 함). UIWebViews 프레임을 scrollViews 크기로 설정하십시오. 그리고 scrollView의 contentSize를 webViews contentSize (또는 지금까지는 프레임)로 설정하십시오.

-(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; 
} 

확대/축소를 사용하려면 scrollViews 대리자에서 추가 메서드를 추가해야합니다.

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

그리고 당신은 샘플 프로젝트 http://www.multiupload.com/P8SOZ4NW6C을 (그것은이 엑스 코드 4 프로젝트) 다운로드 할 수 있습니다.

참고는 '웹보기가 일을 다시 렌더링을 알고하지 않기 때문에 훨씬을 확대하면 줌은 웹보기의 내용을 pixelates, 당신은 링크를 클릭 (하지만 할 수없는 원인의 PDF로 그 shouldn 문제는 아닙니다.)

편집 2 : 더 나은 방법

이 글을 쓰는 때문에 나는 또한 픽셀 화 문제를 해결해야 훨씬 간단하고 쉬운 방법을 깨달았다.

-(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; 
    } 
} 
이제

만 줌 기능, 스크롤, 요법은 ... 여전히 작동합니다 (당신이 확대되면 페이지가 pixelating 오히려 다시 렌더링한다) 의미하는있는 UIScrollView 자체와 상호 작용 할 수 있어야하지만 당신은 '수 t 모든 텍스트를 선택하거나 아무것도 입력합니다.이 방법에 대한 또한

뭔가를 그 this list of UIWebView subViews에 따라이 이를 설정할 수있을되는 페이지가이 페이지를로드 완료 후보다는로드를 시작하기 전에.

+1

답변을 주셔서 감사합니다. UIWebView에 HTML 페이지를 표시 할 때 작동하는 것 같습니다. 나는 나의 질문에 내가 충분히 명확하지 않다고 생각한다 (나는 그것을 편집 할 것이다). UIWebView에 표시되는 내용은 PDF, DOC, PPT, XLS 파일입니다 (파일에서로드 할 URLRequest 만 만듭니다.) –

+0

// 시도 할 수있는 또 다른 방법은 내용보기의 크기를 가져 오는 것입니다. UIWebView는 webViews의 크기를 webView에서 userInteraction을 사용하지 않도록 설정하고, contentView를 webViews 크기로 설정하여 UIScrollView에 추가하면 원하는 경우 자세한 답변을 작성합니다. –

+0

이것은 내 문제에 대한 해결책처럼 보입니다. 나는 그것을 작성할 수 있었지만, 할 수 있다면, 나는 당신의 구현을보고 대답으로 받아들이고 싶습니다. 감사. –