2013-04-22 3 views
4

Я создаю меню в UITableViewCell, этот UIMenuController имеет только два элемента. но когда я подножка его, это меню отображается много пунктов, похоже, пункт меню ИОС по умолчанию, будет показано, как на скриншоте:Как удалить пункты меню по умолчанию из UIMenuController?

enter image description here

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

вот мой код:

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

контратип http://stackoverflow.com/questions/10505755/removing-default-cut-copy-paste-from-uimenucontroller-in-a-tableview – jrc

ответ

11

Вы должны переопределить canPerformAction:withSender: и вернуть NO для действий, которые вы не хотите.

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender { 
    if (action == @selector(_myCustomActionSelector:)) return YES; 
    return NO; 
} 
+0

Это не работает для меня - действия, Я хочу скрыть, даже не перешел к этому методу (вы можете протестировать его через NSLog (@ "% @", NSStringFromSelector (действие)), перед тем как выполнить его сохранение. - iOS 7 и 8 –

+0

Если вас не спрашивают об определенном селекторе это, вероятно, означает, что в цепочке ответчиков есть что-то впереди. '-canPerformAction: withSender:' вызывается в текущем первом ответчике, и если он возвращает 'NO', запрашивается следующий ответчик. Если какой-либо ответчик возвращается 'YES' следующий ответчик не проконсультируется. – axiixc

+0

Спасибо, axiixc, мне нужно подклассифицировать мой элемент пользовательского интерфейса и записать этот метод в файл .m этого подвала. Оно работает. –

Смежные вопросы