UIMenuController не отображается в UILongGestureRecognizer

Я сослался на различные посты на эту тему. Но так и не смог получить решение.

У меня есть подкласс UIButton где я UILongGestureRecognizer, Моя реализация идет следующим образом:

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        UILongPressGestureRecognizer *longGesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPress:)];
        [self addGestureRecognizer:longGesture];
    }
    return self;
}

- (BOOL)becomeFirstResponder
{
    return YES;
}

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender
{
    return YES;
}

- (BOOL)canBecomeFirstResponder
{
    return YES;
}

- (void)longPress:(UILongPressGestureRecognizer *)gesture
{
    if (gesture.state == UIGestureRecognizerStateBegan)
    {
        NSLog(@"ButtonView: longPress: event called");
        UIMenuController *menu = [UIMenuController sharedMenuController];
        if (![menu isMenuVisible])
        {
            ButtonView *btn = (ButtonView *)gesture.view;
            if (![btn becomeFirstResponder])
            {
                NSLog(@"couldn't become first responder");
                return;
            }

            UIMenuItem *menuItem = [[UIMenuItem alloc] initWithTitle:@"Change Color" action:@selector(changeColor:)];
            UIMenuController *menuCont = [UIMenuController sharedMenuController];
            menuCont.arrowDirection = UIMenuControllerArrowDown;
            menuCont.menuItems = [NSArray arrayWithObject:menuItem];
            if([btn canBecomeFirstResponder])
            {
                [menuCont setTargetRect:btn.frame inView:btn.superview];
                [menuCont setMenuVisible:YES animated:YES];
                NSLog(@"menu visible....");
            }
        }
    }
    if (gesture.state == UIGestureRecognizerStateEnded || gesture.state == UIGestureRecognizerStateCancelled || gesture.state == UIGestureRecognizerStateFailed)
    {
        [self.layer setBorderColor:[UIColor clearColor].CGColor];
        [self.layer setBorderWidth:0.0];
    }
}

Я переопределил becomeFirstResponder а также canBecomeFirstResponder,

Важное примечание: мое сообщение журнала "menu visible...." регистрируется, когда я долго нажимал кнопку, но я не могу видеть UIMenuController видимым.

Есть ли что-то, что мне все еще не хватает в коде выше?? Заранее спасибо.

1 ответ

Решение

Добавьте эту строку перед отображением меню:

[self becomeFirstResponder];

И удалите этот код:

- (BOOL)becomeFirstResponder
{
    return YES;
}
Другие вопросы по тегам