Creare ed usare UIMenuController e UIMenuItem personalizzati

In questo articolo parleremo di UIMenuController che praticamente sono i menu che appaiono quando selezioniamo una parola o una lettera in un campo di testo, questa azione e di default. Volendo pero lo possiamo usare per far apparire il menu anche tramite un bottone o altri oggetti. Dobbiamo solo caricare l’UIMenuController che è una classe Singleton e poi aggiungergli dei UIMenuItem. Per capire bene creiamo un progetto nuovo come abbiamo fatto nei precedenti tutorial:

Dobbiamo avere un risultato di questo tipo:

Schermata 04-2456392 alle 16.15.18

Nello storyboard inseriamo un bottone e nel file del implementazione o del interfaccia creiamo un metodo IBAction.  Nel file del implementazione nel metodo inseriamo questo codice:

[code lang=”obj-c”]

//deve essere il primo risponditore
[self becomeFirstResponder];

//Inizializzare la classe UIMenuController che è un singleton
UIMenuController *sharedController = [UIMenuController sharedMenuController];

//Creare i MenuItems
UIMenuItem *menuItem1 = [[UIMenuItem alloc] initWithTitle:@"stato" action:@selector(showWowAlert)];
UIMenuItem *menuItem2 = [[UIMenuItem alloc] initWithTitle:@"nome" action:@selector(showPoweredAlert)];
UIMenuItem *menuItem3 = [[UIMenuItem alloc] initWithTitle:@"numero" action:@selector(log)];

//disegnare il MenuController nella posizione giusta
CGRect drawRect = [sender convertRect:[sender bounds] toView:self.view];
[sharedController setTargetRect:drawRect inView:self.view];
sharedController.arrowDirection = UIMenuControllerArrowDefault;

//Inserire i menuItems nel menuController
[sharedController setMenuItems:@[menuItem1,menuItem2,menuItem3]];

[sharedController setMenuVisible:YES animated:YES];

//Disabilitare il menu item nel futuro
[sharedController setMenuItems:nil];

[/code]

Tramite i commenti potete capire i metodi del MenuController. Adesso inseriamo anche i metodi che faremo partire quando i MenuItem vengono premuti:

[code lang=”obj-c”]
-(void)showWowAlert
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"ciao" message:@"vedi che funziona !!!" delegate:nil cancelButtonTitle:@"ok" otherButtonTitles:nil];
[alert show];
}

-(void)showPoweredAlert
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Aldo" message:@"Questo è il mio nome" delegate:nil cancelButtonTitle:@"ok" otherButtonTitles:nil];
[alert show];
}

-(void)log
{
NSLog(@"stampare qualcosa nel console");
}

[/code]

Abbiamo creato dei UIAlertView solo per capire quando i bottoni sono attivi. Il file del progetto lo pottete scaricare qui:

download codice sorgente