2014-06-09 49 views
1

我有2個viewControllers和第一個我使用tapRecognizer按住,以顯示UImenucontroller複製一個字符串。輕擊用於選擇導航欄上的標題,並顯示帶有複製項目的UImenu控制器。UIMenuController不會顯示更改視圖控制器後

它適用於第一個時間,但當用戶切換到另一個視圖控制器並再次返回到第一個視圖控制器時,菜單不再顯示。

-(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值傳遞類似40而不是-12的東西,即使在轉到另一個控制器並返回之後,它也可以工作。 – rdelmar

+0

這個視圖是一個子視圖,嵌入在導航視圖控制器中,這就是爲什麼我添加了-12。顯示時處於正確的位置。 –

回答

5

添加[自becomeFirstResponder]流行UIMenuController 例如之前你可以改變你的代碼如下

-(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]; 
    } 
} 

而且不要忘記實現

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

爲了您的視圖 - 控制

+0

它的工作原理,謝謝 –

+0

它也適用於iOS 10.x。謝謝@Hsin –

-1

檢查LongPressGestureRecognizer是否每次都在工作。

我會放在viewDidAppear而不是viewDidLoad中的gesturerecognizer代碼,只是爲了安全起見

+0

我已經測試了把NSLog放在tapRecognizer中,它能正常工作,但屏幕上沒有任何東西出現 –

+0

看看這個鏈接是否有任何意義http://stackoverflow.com/questions/3112925/uimenucontroller-not-showing-up?rq=1 – Debanjan

+0

我已經嘗試了所有,它工作之前,我切換到新的控制器 –

相關問題