iOS: отключение меню UIMenuItem

У меня есть 2 места в моем приложении, которые я использую UILongPressGestureRecognizer, чтобы показать меню с 2 вариантами. Два местоположения, Левое и Правое, являются UILabels, которые отображают числа. При длительном нажатии на номер появится меню с вариантами "Сброс на 0" или "Отмена".

Я получаю меню для всплывающих без проблем. Тем не менее, я столкнулся с проблемой после отображения меню: отображение пунктов меню ПРАВАЯ СТОРОНА обрезано почти вдвое. Я включил изображение, чтобы проиллюстрировать мою проблему (части изображения намеренно пикселированы). Пункт меню работает, он вызывает правильный метод, он просто не отображается правильно. У меня есть звонок -(BOOL)canBecomeFirstResponder {return YES;} позже в классе.

Вот мой код для меню слева:

- (IBAction)leftActionLongPress:(UILongPressGestureRecognizer*)recognizer
{
// On a long press, show popup menu with selections to reset the number to
// zero or not

[self.leftActionNameNumber canBecomeFirstResponder];

// Check if the number is not a zero
if ([self.leftActionNameNumber.text isEqualToString:@"0"]) {
    // Equal to zero so don't show the popup menu
    return;
} else {
    // Number is not a zero, show popup menu
    UIMenuItem* resetMenu =
        [[UIMenuItem alloc] initWithTitle:@"Reset to 0"
                                   action:@selector(resetLeftToZero)];
    UIMenuItem* cancelMenu =
        [[UIMenuItem alloc] initWithTitle:@"Cancel"
                                   action:@selector(leaveNumberAsIs)];

    UIMenuController* menu = [UIMenuController sharedMenuController];
    [menu setMenuItems:[NSArray arrayWithObjects:resetMenu, cancelMenu, nil]];
    [menu setTargetRect:self.leftActionNameNumber.frame inView:self.view];
    [menu setMenuVisible:YES animated:YES];
}

Вот код для правого меню:

- (IBAction)rightActionLongPress:(UILongPressGestureRecognizer*)recognizer
{
// On a long press, show popup menu with selections to reset the number to
// zero or not

[self.rightActionNameNumber canBecomeFirstResponder];


// Check if the number is not a zero
if ([self.rightActionNameNumber.text isEqualToString:@"0"]) {
    // Equal to zero so don't show the popup menu
    return;
} else {
    // Number is not a zero, show popup menu
    UIMenuItem* resetMenu =
        [[UIMenuItem alloc] initWithTitle:@"Reset to 0"
                                   action:@selector(resetRightToZero)];
    UIMenuItem* cancelMenu =
        [[UIMenuItem alloc] initWithTitle:@"Cancel"
                                   action:@selector(leaveNumberAsIs)];

    UIMenuController* menu = [UIMenuController sharedMenuController];
    [menu setMenuItems:[NSArray arrayWithObjects:resetMenu, cancelMenu, nil]];
    [menu setTargetRect:self.rightActionNameNumber.frame inView:self.view];
    [menu setMenuVisible:YES animated:YES];

}

Отображение изображения UIMenuItem с вырезанным меню

0 ответов

Другие вопросы по тегам