更改视图控制器后,UIMenuController不显示

Soh*_*eil 1 xcode objective-c uiviewcontroller uimenucontroller ios

我有2个viewControllers,在第一个我使用tapRecognizer按住,以显示UImenucontroller复制字符串.点击用于在导航栏上选择标题,它显示一个带有复制项目的UI菜单控制器.

一次工作,但是当用户切换到另一个视图控制器并再次返回第一个视图控制器时,菜单不再显示.

-(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;
}
Run Code Online (Sandbox Code Playgroud)

小智 6

添加[self becomeFirstResponder]; 在pop 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];
    }
}
Run Code Online (Sandbox Code Playgroud)

别忘了实施

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

对于你的viewcontroller