2010-09-30 31 views
5

Im parlando del menu che appare quando si seleziona un blocco di testo che ti dà la possibilità di tagliare/incollare/copiare. Ho capito come aggiungere un'altra opzione al menu, ma se aggiungo due o più opzioni dirà prima "more". facendo clic su di esso verranno visualizzate tutte le opzioni che ho aggiunto. Ma c'è un modo per mostrare tutte le opzioni che ho aggiunto in anticipo? senza la voce di menu "Altro"?Menu contestuale iPhone/iPad

risposta

7

È necessario utilizzare un UIMenuController. Se non si desidera Copia/Incolla/Taglia, si includere qualcosa di simile nel tuo canPerformAction: metodo:

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

Creazione di una nuova voce di menu simile a questo:

UIMenuItem *someAction = [[UIMenuItem alloc]initWithTitle:@"Something" action:@selector(doSomething:)]; 

UIMenuController *menu = [UIMenuController sharedMenuController]; 
menu.menuItems = [NSArray arrayWithObject:someAction]; 
[menu update]; 
+1

Non è che non voglio quelli. Devo aggiungere altre due voci di menu. – Melina

+0

Quindi si usa ancora qualcosa come ho postato, ma piuttosto che fare @selector (copia :), cambiarlo in qualcosa come @selector (copyText :), quindi implementare il proprio - (void) metodo copyText che esegue la copia. Quindi gli altri tuoi articoli non verranno spinti al menu più. – christo16

+0

posso modificare il testo della voce di menu? – Melina

1

Presumo tua parlando di UIMenuController. Se non si desidera visualizzare Copia/Incolla/Taglia/Elimina/Select/SelectAll sarà necessario aggiungere il seguente codice al tuo UITextField 's o UITextView' s delegato:

- (BOOL)canPerformAction: (SEL)action withSender: (id)sender { 
    BOOL answer = NO; 
    if (action == @selector(item1)) { 
     answer = YES; 
    } 
    if (action == @selector(item2)) { 
     answer = YES; 
    } 
    return answer; 
} 

Dove item1 e item2 sono i nomi degli oggetti in UIMenuController.menuItems.

Nella mia esperienza se si utilizza un UITextView le voci di menu Copia, Incolla, Taglia e Seleziona tutto rimarranno, in questo caso aggiungere il seguente codice a una sottoclasse di UITextView.

- (BOOL) canPerformAction:(SEL)action withSender:(id)sender { 
    if (action == @selector(cut:) || action == @selector(copy:) || action == @selector(paste:) || action == @selector(selectAll:)) { 
      return YES; 
    } 
} 
+0

Non voglio disabilitare queste opzioni, ho bisogno di aggiungere altre due opzioni personalizzate. – Melina

Problemi correlati