2010-07-16 3 views
17

UITextView에서 "복사", "붙여 넣기"항목 옆에 메뉴 항목을 추가하려고합니다. 나는 UITextView의 서브 클래스를 생성하고 여기에 애플의 문서에서 예제를 복사 한 :UITextView에서 UIMenuController에 사용자 지정 UIMenuItem을 추가하려면 어떻게해야합니까?

http://developer.apple.com/iphone/library/documentation/General/Conceptual/iPadProgrammingGuide/Text/Text.html#//apple_ref/doc/uid/TP40009370-CH8-SW28

은 단순히 IB에 UiTextView을 만들어 내 CustomTextView 클래스에 해당 클래스를 설정합니다. 불행히도 이것은 효과가 없었습니다. UIView의 하위 클래스로 CustomTextView를 설정하더라도 훌륭하게 작동합니다. 도움이 필요 하신가요?

내가 항상 존재하는 사용자 정의 메뉴 항목을 만들에만 수

답변

35

그래서 나는 내가 원하는 결과를 다음을 사용하여 종료, 내보기 컨트롤러의 viewDidLoad에 방법에 다음 블록을 배치 :

다음
- (void)viewDidLoad { 
    [super viewDidLoad]; 

    UIMenuItem *menuItem = [[UIMenuItem alloc] initWithTitle:@"Change Color" action:@selector(changeColor:)]; 
    [[UIMenuController sharedMenuController] setMenuItems:[NSArray arrayWithObject:menuItem]]; 
    [menuItem release]; 
} 

는 내가보기에 다음을 추가 대신이 방법으로 인해 사용자 정의 UITextView 클래스의 뷰 컨트롤러의 방법 withSender :

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender { 
    if (action == @selector(changeColor:)) { 
     if (textView.selectedRange.length > 0) { 
      return YES; 
     } 
    } 
    return NO; 
} 

나는 canPerformAction를 배치하기로 결정했습니다 : 텍스트가 나는 "텍스트 뷰를"라는 UITextView 내에서 선택 될 때 컨트롤러는 조건부로 항목을 표시합니다 O 옵션 (예 : 복사, 잘라 내기, 붙여 넣기 등)는 응답 체인의 모든 객체에서 메소드가 호출되기 때문에 정상적으로 동작합니다.

+0

+1 그러나 changeColor 메서드가 내 사용자 정의 TableViewCell 클래스를 가리키고 존재하지 않기 때문에 충돌이 발생합니다. 이 컨트롤러를 뷰 컨트롤러로 지정할 수 있습니까? –

+1

UIWindow가 키 윈도우인지 확인하고이 메소드를 구현해야 할 수도 있습니다. - (BOOL) canBecomeFirstResponder { return YES; } –

1

했다

apps.popsweet.com/TextViewTrial.zip :

나는 여기 내 상황의 아주 간단한 예제 프로젝트를했습니다 다음을 수행하여 팝업 메뉴에서 :

- (void) setUpCustomMenu { 
Class cls1 = NSClassFromString(@"UIMenuController"); 
Class cls2 = NSClassFromString(@"UIMenuItem"); 
if (cls1 && cls2) 
    if ([UIMenuController instancesRespondToSelector:@selector(setMenuItems:)]) { 
      UIMenuItem* item1 = [[UIMenuItem alloc] initWithTitle:@"My Menu Item" action:@selector(myMenuAction:)]; 
      [UIMenuController sharedMenuController].menuItems = [NSArray arrayWithObjects:item1, nil];; 
      [item1 release]; 
    } 
} 

이것은보기 컨트롤러의 viewDidLoad에서 호출됩니다.

저는 메뉴 컨트롤러를 소환하는 이벤트를 가로 채서 조건부로 메뉴 항목을 조건부로만 표시하도록 고심하고 있습니다 (예 : 선택되어있는 경우). 지금까지 나는 이것을 할 수 없었다. 알렉스가 암시로

관련 문제