2014-06-09 3 views
1

2 개의 viewController가 있고 처음에는 tapRecognizer를 사용하여 문자열을 복사하는 UImenucontroller를 표시하기 위해 누르고 있습니다. 탭은 탐색 바에서 제목을 선택하는 데 사용되며 복사 항목이있는 UImenucontroller가 표시됩니다.UIMenuController가 View Controller를 변경 한 후에 표시되지 않습니다.

처음에는 시간이 걸렸지 만 사용자가 다른보기 컨트롤러로 전환하여 다시 첫 번째보기 컨트롤러로 돌아 오면 더 이상 메뉴가 표시되지 않습니다.

-(void)viewDidLoad{ 
    [super viewDidLoad]; 
    UIView *viewWithTitleLabel = self.navigationController.navigationBar.subviews[1]; 
    viewWithTitleLabel.userInteractionEnabled = YES; 

    UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(topBarTitleTap:)]; 
    [viewWithTitleLabel addGestureRecognizer:longPress]; 
} 

-(void)topBarTitleTap:(UILongPressGestureRecognizer *)gestureRecognizer 
{ 
    if ([gestureRecognizer state] == UIGestureRecognizerStateBegan) { 
     UIMenuController *menuController = [UIMenuController sharedMenuController]; 
     [menuController setTargetRect:CGRectMake(CGRectGetMidX([self.view bounds]), -12.0, 0.0f, 0.0f) inView:self.view]; 
     [menuController setMenuVisible:YES animated:YES]; 
    } 
} 

- (void) copy:(id) sender { 
    // called when copy clicked in tab bar title 
    NSString *copyStringverse = self.navigationItem.title; 
    UIPasteboard *pasteboard = [UIPasteboard generalPasteboard]; 
    [pasteboard setString:copyStringverse]; 
} 

- (BOOL) canBecomeFirstResponder { 
    return YES; 
} 
+0

은 작동하지 않았다 조금도. setTargetRect : 메소드의 y 값에 -12 대신 40과 같은 값을 전달하면 다른 컨트롤러로 이동하여 돌아올 때마다 매번 작동합니다. – rdelmar

+0

이 뷰는 하위 뷰이며 탐색 뷰 컨트롤러에 포함되어 있으므로 -12를 추가 한 것입니다. 그리고 그것이 나타날 때 정확한 위치에 있습니다. –

답변

5

추가 안전을 위해 대신 viewDidLoad에의 viewDidAppear의 gesturerecognizer 코드를 배치 할 [자기 becomeFirstResponder]; 내가 코드를 시도했을 때

-(void)topBarTitleTap:(UILongPressGestureRecognizer *)gestureRecognizer 
{ 
    [self becomeFirstResponder]; 
    if ([gestureRecognizer state] == UIGestureRecognizerStateBegan) { 
     UIMenuController *menuController = [UIMenuController sharedMenuController]; 
     [menuController setTargetRect:CGRectMake(CGRectGetMidX([self.view bounds]), -12.0, 0.0f,  0.0f) inView:self.view]; 
     [menuController setMenuVisible:YES animated:YES]; 
    } 
} 

에 따라 그리고 당신의 ViewController를 들어

-(BOOL)canPerformAction:(SEL)action withSender:(id)sender 
{ 
    //Customize your action if statement here 
    return YES; 
} 

을 구현하는 것을 잊지 마세요 예를 들어 대중 UIMenuController 하기 전에 코드를 변경할 수 있습니다

+0

로 전환하기 전에 작동한다. 덕분에 –

+0

그것은 iOS 10.x에서도 작동한다. 고마워요 @ 신 –

-1

매번 LongPressGestureRecognizer가 작동하는지 확인하십시오.

난 그냥

+0

NSLog를 tapRecognizer에 넣고 테스트했지만 작동했지만 아무 것도 화면에 나타나지 않습니다. –

+0

이 링크가 어떤 링크인지 확인하십시오. http://stackoverflow.com/questions/3112925/uimenucontroller-not-showing-up?rq=1 – Debanjan

+0

나는 모든 것을 시도하고 그것이 새로운 컨트롤러 –

관련 문제