Как удалить элементы меню по умолчанию из UIMenuController?

Я создаю меню в UITableViewCell, в этом UIMenuController всего два пункта. но когда я его запустил, в этом меню отображалось много элементов, кажется, пункт меню ios по умолчанию, как на снимке экрана:

введите описание изображения здесь

Как я могу удалить эти элементы и просто отобразить определенный элемент? Спасибо.

вот мой код:

- (id)initWithComment:(DSComment *)comment
{
    self = [super initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"comment"];

    UILabel *contentLabel=[[UILabel alloc] initWithFrame:CGRectMake(10, 45, 300, 0)];
    contentLabel.text=comment.message;

    [self.contentView addSubview:contentLabel];
    return self;
}


- (BOOL) canBecomeFirstResponder {
    return YES;
}

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    [self becomeFirstResponder];
    UIMenuController *menu = [UIMenuController sharedMenuController];
    UIMenuItem *like = [[UIMenuItem alloc] initWithTitle:@"Like" action:@selector(like:)];
    UIMenuItem *reply = [[UIMenuItem alloc] initWithTitle:@"Replay" action:@selector(reply:)];

    [menu setMenuItems:[NSArray arrayWithObjects:like, reply, nil]];

    [menu setTargetRect:CGRectMake(0, 0, 0.0f, 0.0f) inView:self];
    [menu setMenuVisible:YES animated:YES];
}

person Perchouli    schedule 22.04.2013    source источник
comment
Обман stackoverflow.com/questions/10505755/   -  person jrc    schedule 17.10.2015


Ответы (1)


Вам необходимо переопределить _ 1_ и вернуть NO для действий, которые вам не нужны.

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender {
    if (action == @selector(_myCustomActionSelector:)) return YES;
    return NO;
}
person axiixc    schedule 22.04.2013
comment
У меня это не работает - действия, которые я хочу скрыть, даже не передаются в этот метод (вы можете проверить это через NSLog (@% @, NSStringFromSelector (action)); перед возвратом. - iOS 7 и 8 - person Andrei Konstantinov; 04.02.2015
comment
Если вас не спрашивают о конкретном селекторе, это, вероятно, означает, что впереди вас что-то в цепочке респондентов, которое его принимает. -canPerformAction:withSender: вызывается у текущего первого респондента, и если он возвращает NO, запрашивается следующий респондент. Если какой-либо респондент возвращает YES, к следующему респонденту не обращаются. - person axiixc; 11.02.2015
comment
Спасибо, axiixc, мне нужно создать подкласс моего элемента пользовательского интерфейса и записать этот метод в файл .m этого подкласса. Оно работает. - person Andrei Konstantinov; 11.02.2015
comment
Я попробовал это решение для WKWebView, чтобы удалить системные вызовы, такие как копирование, поиск и совместное использование. Это решение не сработало, этих событий не было - person anoop4real; 23.06.2017
comment
Я не уверен, что с WKWebView есть хороший способ сделать это. Сам WKWebView не является первым респондентом, есть более глубокий объект, который берет на себя эту роль и будет отвечать до того, как у более высокого респондента появится шанс. - person axiixc; 24.06.2017