2011-09-08 4 views
4

UIWebView 컨트롤을 내 응용 프로그램에 추가했습니다.UIWebView - 사용자 지정 컨텍스트 메뉴 만들기?

기본 컨텍스트 메뉴를 비활성화하려면 webViewDidFinishLoad를 구현했습니다.

- (void) webViewDidFinishLoad:(UIWebView *)theWebView { 
    NSString *varMySheet = @"var mySheet = document.styleSheet[0];"; 
    NSString *addCSSRule = @"function addCSSRule(selector, newRule) {" 
     "if (mySheet.addRule) {" 
     "mySheet.addRule(selector, newRule);" 
     "} else {" 
     "ruleIndex = mySheet.cssRules.length;" 
     "mySheet.insertRule(selector + '{' + newRule + ';}', ruleIndex;" 
     "}" 
     "}"; 
    ... 
    NSString *insertRule = @"addCSSRule('body', '-webkit-touch-callout: none;')"; 

    [webView stringByEvaluatingJavaScriptFromString:varMySheet]; 
    [webView stringByEvaluatingJavaScriptFromString:addCSSRule]; 
    [webView stringByEvaluatingJavaScriptFromString:insertRule]; 
    ... 
} 

그러나 웹보기의 상황에 맞는 메뉴가 사라지지 않습니다. 누구든지 나를 도와주세요.

는 또한
[webView stringByEvaluatingJavaScriptFromString:@"document.body.style.webkitTouchCallout='none';"]; 

그것은 작동하지 않았다

을 시도했다. 감사합니다. .

+1

당신의 메소드 이름은'webViewDidFinishLoad :'가 아니라'webViewDidLoadFinished :'입니다. 그것은 질문 및/또는 코드의 오타입니까? – Jilouc

+0

이 질문에 불편을 끼쳐 드려 죄송하지만 질문을 받아야한다고 생각합니다. 'UIWebView'' delegate' 속성을 설정하고 코드가 실행되고 있는지 확인하십시오. – nloko

+0

예. 나는 [webView setDelegate : self]를 추가한다. – cyberworld

답변

0

왜이 자바 스크립트로 모든 것을 수행하려고하는지 설명해 주시겠습니까? 다음 작업만으로 충분하지 않습니까?

- (void) webViewDidFinishLoad:(UIWebView *) sender { 
    // Disable the defaut actionSheet when doing a long press 
    [webView stringByEvaluatingJavaScriptFromString:@"document.body.style.webkitTouchCallout='none';"]; 
    [webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.style.webkitTouchCallout='none';"]; 
} 
+0

감사. 나는 그것을 시도했지만 또한 작동하지 않습니다. – cyberworld

+0

위 코드와 같은 의미입니다. – cyberworld

+0

iOS3 및 iOS4와 호환되는 동안 최신 iOS 베타 버전에서 작동하지 않는 것으로 나타났습니다 ... iOS 베타 버전을 사용하고 있습니까? – Sylverb

0

UIWebView를 서브 클래 싱해야합니다. 사용자 정의보기에서 canPerformAction : withSender 메소드를 다음과 같이 구현하십시오.

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender { 
    return NO; 
} 

그러면 모든 메뉴 항목이 사라집니다. 일부 항목 만 표시하려면 지정된 항목에 대해 YES를 리턴해야합니다.

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender { 
    BOOL ret = NO; 
    if (action == @selector(copy:)) ret = YES; 
    return ret; 
} 

보기에서 단어를 길게 누르면 "복사"만 가능합니다.

관련 문제