2009-08-11 3 views
2

나는 터치 이벤트를 잡아서 사용하기 위해 UIWebView의 하위 클래스를 만들고 그 위에 UIView를 추가했습니다.UIWebView 이벤트를 선택하고 복사하여 선택/복사하기

이제 UIWebView 위에 추가보기가 추가되어 텍스트 선택이 전혀 작동하지 않습니다. 추가 UIView를 제거하면 텍스트가 선택되지만 이벤트를 식별 할 수는 없습니다.

두 기능이 공존 할 수있는 방법이 있습니까?

[편집]

내 게시물이 분명하지 않을 수 있습니다. 이벤트를 처리하기 위해 UIWebView를 하위 클래스 화하면 선택이 작동하지 않습니다. 더 이상 복사 할 텍스트를 선택할 수 없습니다. 어떤 아이디어?

답변

4

"UIWebView 클래스는 서브 클래 싱되지 않아야합니다." - Apple's UIWebView docs에서.

사람이 웹 페이지와 상호 작용하는 방식을 엉망으로 만드는 것처럼 들리 겠지만 앱 스토어에서 거부 당할 가능성이 있습니다. 제어하려는 경우

  • : (. 가능한 거절 많은 이유를 들어, app rejected 체크 아웃)

    당신이 그것에 대해 걱정하지 않은 경우, 여기 당신이 당신의 목표를 달성하는 데 도움이 될 몇 가지 조언입니다 사용자가 하이퍼 링크를 통해 이동하거나 이동할 수 없거나 일부 링크를 클릭 할 때마다 코드를 수행하는 경우 UIWebViewDelegate 프로토콜의 webView:shouldStartLoadWithRequest:navigationType: 메소드를 통해 후크를 추가 할 수 있습니다. 매우 편리합니다.

  • 페이지가 작동하는 방식을 약간 수정하려면 페이지에서 stringByEvaluatingJavaScriptFromString:이라는 메서드와 UIWebView이라는 메서드를 호출하여 고유 한 JavaScript를 실행할 수 있습니다. 자바 스크립트를 문자열로 전달하십시오.

그리고 원하지 않는 경우 (이 경우 앱 스토어 리뷰 녀석을 실제로 체크 아웃 할 것입니다), 이미 수행중인 작업을 수행 할 수 있습니다. 그리고 바로 UITouch의 모든 것을 전파하여 UIWebView 그 자체에 전파하십시오. (중복 UIView에서) 예를 들어 이런 식으로 뭔가 :

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { 
    [self doWhatever]; 
    [underlappingWebView touchesMoved:touches withEvent:event]; 
} 

당신이 당신의 케이크 (사용자의 터치 정보를 얻을)를 가지고도 그것을 먹을 수있는 그 방법 (정상적으로처럼 웹 페이지의 행동이) .

+0

나는 당신이 제안한 것을 이미하고 있지만, UIWebView를 건 드리면 텍스트 선택이 중단됩니다. 더 이상 복사 할 텍스트를 선택할 수 없습니다. – Mithin

+0

나는 그것이 작동하지 않는 이유를 100 % 확신하지 못합니다. 어쩌면 복사 및 붙여 넣기 (선택 포함)는 iPhone SDK가 어떤 UIView가 가장 중요한지를 알고 해당 정보를 사용하는 특수 기능입니다. 문제가 발생한 상황에 가까운 경우 문제가 발생할 수 있습니다. 큰 그림의 목표를 명확하게 밝히면 stackoverflow에서 더 유용한 제안을 얻을 수 있습니다. – Tyler

+0

HTML의 특정 ID가있는 div 태그를 탭하면 일부 정보를 편집하고 저장할 수있는보기를 표시하려고합니다. 또한 동일한 HTML에서 사용자는 텍스트를 선택하고 저장할 수 있어야합니다. 나는 첫 번째 기능을 성공적으로 구현했지만 두 번째 기능과는 어려움을 겪고있다. 탭을 가로 채기 위해 UIView를 UIWebView 위에 추가하면 텍스트 선택이 작동하지 않습니다. UIView 중복 제거하면 잘 작동합니다. 어떻게하면이 두 가지를 모두 얻을 수있는 아이디어? 감사합니다. – Mithin

0

듣고 싶지 않지만 원하는 기능을 얻으려면 전략을 재고해야합니다.

UIWebview는 복잡한 동작이 많으며 웹 렌더링 엔진 전체를 캡슐화합니다.

목표를 다른 방식 (도구 모음 항목 일 수도 있음)으로 설정하거나 원하는 기능을 대리인 메서드에서 숨길 수 있습니다.