2011-01-03 7 views
2

테이블 셀을 길게 누르면 UIMenuController가 표시됩니다. 아래 코드를 사용하고 있습니다.내 UIMenuItems가 UIMenuController의 'more'섹션에 표시되는 이유는 무엇입니까?

- (void)onCellLongPressed:(UILongPressGestureRecognizer *)recognizer { 

    if (recognizer.state == UIGestureRecognizerStateRecognized) { 

     ContactTableViewCell *cell = (ContactTableViewCell *)recognizer.view; 
     [cell becomeFirstResponder]; 

     UIMenuItem *item1 = [[UIMenuItem alloc] initWithTitle:@"ME" action:@selector(setMe)]; 
     UIMenuItem *item2 = [[UIMenuItem alloc] initWithTitle:@"YOU" action:@selector(setYou)]; 
     [theMenu setMenuItems:[NSArray arrayWithObjects:item1, item2, nil]]; 

     UIMenuController *theMenu = [UIMenuController sharedMenuController]; 
     [theMenu setTargetRect:[cell frame] inView:[self tableView]]; 
     [theMenu setMenuVisible:YES animated:YES]; 
    } 
} 

내 문제는 내가 셀을 길게 누르면 모든 기본 메뉴 항목이 팝업된다는 것입니다. 메뉴가 팝업되면 내 메뉴 항목 "SAVE"및 "DELETE"가 표시되지 않습니다. '더보기'메뉴를 선택하면 표시됩니다. 아래 스크린 샷을 게시했습니다.

스크린 샷 1 : 셀을 길게 누르면 팝업 메뉴가 나타납니다.

alt text

스크린 샷 2 : 메뉴 나 스크린 샷에 "추가"메뉴 항목을 누르면 1

alt text

나는 스크린 샷 2 메뉴가 때 열려 셀을 길게 누르십시오.

  1. 여기서 내가 뭘 잘못하고 있니?
  2. 여기에 무엇이 누락 되었습니까?
  3. 제대로 작동하려면 어떻게해야합니까?

답변

3

기본 항목을 사용하지 않으려면 NO를 반환하려면 canPerformAction:withSender: 메서드가 필요합니다. 즉, 응답 체인에있는 객체가 요청 된 동작을 수행하지 않거나 메소드의 사용자 정의 구현을 수행해야합니다.

+0

오 .. 고맙습니다 ..하지만 내가 돌아 오지 않으면 메뉴가 전혀 표시되지 않습니다. 어떤 특별한 경우에만 아니오를 반환해야합니까? – EmptyStack

+0

@ Graham Lee : 고마워 .. 사실 canPerformAction : withSender : method를 사용하기 전에 이해하지 못했습니다. 이제 그걸 이해했습니다 .. 그 작동 .. 한 가지 더, 이제는 단지 첫 번째 라인을 이해했습니다 ** "기본 항목을 비활성화하려면 canPerformAction : withSender : 메소드가 필요합니다."** :) 감사합니다. 도와주세요 .. – EmptyStack

+0

@ 사이먼, 귀하의 코드가 바뀌 었는지 공유 할 수 있습니까? 나는 아직도 특정한 경우에 아이템을 보여주지 않는 방법을 이해하지 못한다. 내가 도와 줄 수 있을까? –

관련 문제