2010-07-16 2 views
1

저는 iPhone 응용 프로그램을 개발 중이며 UIWebViews에서 작업했습니다. 나는 UiWebView (Copy, Select All, Cut, 등)에서 문자열을 강조 표시 할 때 팝업 된 UIMenuItems를 사용자 정의하려고했습니다. 나는 그 menuItems를 제거하는 것을 시도했다 그러나 나는 COPY 메뉴 품목을 제거 할 수 없다.UIMenuController에서 COPY UIMenuItem을 제거하는 방법

당신 도움이 필요합니다.

덕분에, ZaldzBugz

+0

저는 이것이 canPerformAction에서 수행 될 수 있다고 생각합니다. 하지만 난 정말 COPY 메뉴 항목을 제거하는 방법을 몰라. – Zaldy

+1

안녕하세요, UIMenuController에서 다른 메뉴 항목을 제거하는 방법을 알려주시겠습니까? –

+0

@Risma - 화살표 항목을 제거하고 메인 프레임에 사용 가능한 모든 메뉴를 놓으려는 행운이 있습니까? –

답변

2

당신은 어떤 하이재킹을해야 할 것입니다. 나는 그것이 가능한지조차 모른다. 아마 UILongPressGestureRecognizer라는 제스처 이벤트에 응답하는 것 같습니다.

제스처가 추가 된보기를 찾아야합니다. 이 같은.

NSArray *gestures = myWebView.gestureRecognizers; 
for(int i=0;i<[gestures count];i++){ 
    UIGestureRecognizer g = [gestures objectAtIndex:i]; 
    if([g isKindOfClass:UILongPressGestureRecognizer.Class]){ 
     [myWebView removeGestureRecognizer:g]; 
     break; 
    } 
} 

하지만 제스처가 UIWebview에 직접 있다고 생각하지 않습니다. 하위 뷰 중 하나에 있습니다. 아니 하나에 다음 내가 의심 란 무엇입니까 가장에있는보기에 아마도 경우

그래서이 서브 뷰에

UIScrollView *sview = [[mywebview subviews] objectAtIndex:0]; 

을 수 있습니다. 그것은 문서화되지 않은 뷰 유형이지만, 우리가 호출하는 메소드의 UIView로 취급한다면 아마 안전 할 것입니다. 또한, 당신이 UIView로 취급하기 때문에, 그것은 내가 아는 한 규칙에 위배되지 않습니다. 당신이 볼 당신이에서 제거 알 중요하기 때문에

UIScrollView *sview = [[mywebview subviews] objectAtIndex:0]; 
UIView *realWebView = [[sview subviews] objectAtIndex:10]; 

나는 모든 뷰에서 제스처를 제거하려고 할 (안된) 스 니펫을 작성하지 않은 이유는.

제거한 후에는 고유 한 UILongPressGestureRecognizer를 작성한 다음 새보기를 해당보기 (제거 된보기)에 추가해야합니다.

복사 선택 등의 모든 기능을 잃어 버렸지 만 지금은 직접 구현할 수 있습니다.

이전 기능을 원한다면 다시 얻을 수있는 방법을 알고 있다고 생각하지만 허용 또는 안전하다고 약속 할 수 없습니다.

제스처를 제거하기 전에 메서드를 UIView로 재정의해야합니다. 당신은 내가 아무것도 약속 할 수

@implementation UIView (extended) 
    -(BOOL) respondsToSelector:(SEL)aSelector { 
      printf("SELECTOR: %s\n", 
      [NSStringFromSelector(aSelector) UTF8String]); 

      return [super respondsToSelector:aSelector]; 
    } 
@end 

(파일의 상단에) 현재 작업 클래스 파일에서 그것을 할 수 있어야하지만,이보기에 호출 될 때마다 메소드의 이름을 기록해야 .

앱을 실행하고 복사, 붙여 넣기, 선택, 모든 메소드 선택을 실행하십시오. 단추를 누를 때 호출되는 메소드가 로그에 표시되어야합니다. 단추를 누를 때 여러 가지 방법이 표시 될 수 있습니다. 아마도 첫 번째 단추 만 원할 것입니다.

이제 menuItem을 만들 때 할당 할 선택기를 알 수 있습니다.

이것은 모두 추측입니다. 희망이 도움이됩니다.

1

this answer에서 기술을 사용하여 비슷한 질문을하고 복사 메뉴 항목을 제거하는 데 사용됩니다.즉, 해당 예제에서 UITextView 대신 UIWebView를 재정의합니다. 또한 내 사용자 지정 선택기에 대해 YES를 반환하는보기 컨트롤러에서 canPerformAction : withSender :를 작성하고 copy : selector에 대해 NO를 반환 한 다음 해당 선택기가 해당 선택기가 아닌 경우 super 구현의 값을 반환합니다. xib에 사용자 정의 UIWebView 서브 클래스 이름을 설정하는 것을 잊지 마십시오.