2010-11-23 3 views
2

그룹화 된 UITableView에서 사용자가 오랫동안 셀을 누르면 사용자 정의 UIMenuController를 표시하려고합니다. 그러나, 긴 언론을 성공적으로 감지 한 후 UIMenuController를 표시 할 수 없습니다. 어떤 도움이라도 대단히 감사합니다. cellForRowAtIndexPath에서 UITableView에 셀이있을 때 UIMenuController를 표시하는 데 문제가 발생했습니다.

MyViewController.h 
@interface MyViewController : UIViewController <UITableViewDelegate,UITableViewDataSource> 
    UITableView *table; 
    @property (nonatomic, retain) IBOutlet UITableView *table; 
@end 

나는 나의 긴 보도 제스처 인식기 여기

cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:SectionsTableIdentifier] autorelease]; 
    UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleLongPress:)]; 
    [cell addGestureRecognizer:longPress]; 
    [longPress release]; 

내 handleLongPress 액션 메소드

-(void)handleLongPress:(UIGestureRecognizer *)longPress { 

    if (longPress.state == UIGestureRecognizerStateBegan) { 

    CGPoint pressLocation = [longPress locationInView:self.table]; 
    NSIndexPath *pressedIndexPath = [self.table indexPathForRowAtPoint:pressLocation]; 

    UIMenuItem *first = [[UIMenuItem alloc] initWithTitle:@"Save" action:@selector(saveRecent)]; 
    UIMenuItem *second = [[UIMenuItem alloc] initWithTitle:@"Edit" action:@selector(editQuery)]; 

    UIMenuController *menuController = [UIMenuController sharedMenuController]; 
    menuController.menuItems = [NSArray arrayWithObjects:first,second,nil]; 

    [menuController setTargetRect:longPress.view.frame inView:longPress.view.superview]; 
    [menuController setMenuVisible:YES animated:YES]; 
    [pressedIndexPath release]; 
    } 
} 

편집하고 저장 단지 UIAlertView를 표시하는 처리 방법입니다 연결합니다. 나는 또한 UIMenuController가 표시되는 경우에만 저장하고 나 또한 내가 당신이 필요로 생각

-(BOOL)canBecomeFirstResponder { 

    return YES; 
} 

답변

1

첫 번째로 반응을 할 MyViewController를 주장하고있어

-(BOOL)canPerformAction:(SEL)action withSender:(id)sender { 

BOOL canPerform = NO; 

if (action == @selector(saveRecent)) { 
    canPerform = YES; 
} 
if (action == @selector(editQuery)) { 
    canPerform = YES; 
} 

return canPerform; 
} 

편집 옵션이 존재 될 수 있도록하기 위해 아래의 방법을 구현 UIMenuController를 표시하기 위해 firstResponder 상태를 주장하는보기가 있어야합니다. 귀하의 코드에서 그런 일이 일어나지 않습니다.

나는이 질문에 대한 답으로 UIMenuController 사용을위한 방향을 썼다 :

Customize UIMenuController

+0

나는 그것을 않아도됩니다. MyViewController 구현 파일에서 - (BOOL) canBecomeFirstResponder { \t return YES; } – aahrens

+2

하지만 첫 응답자가 되려면 [someView becomeFirstResponder]를 호출해야합니다. – TomSwift

+0

UIMenuController는 firstResponder 뷰를 메시지를 보내는 시작점으로 사용합니다. 첫 번째 응답자가 활성화되어 있지 않으면 메뉴가 표시되지 않습니다. 귀하의 메뉴가 적용되는 뷰는 becomeFirstResponder를 호출하여 첫 ​​번째 응답자로 만들어야합니다. – TomSwift

관련 문제