Nella lezione precedente abbiamo inserito il codice relativo al delegato ed abbiamo stabilito che la prima schermata che verrà mostrata all’utente è quella relativa al menù di navigazione. A questo punto vediamo il codice da inserire all’interno del file header del nostro MenuViewController:
#import # <UIKit/UIKit.h>
@class GuidaAppDelegate;
@class Vista1ViewController;
@class Vista2ViewController;
@class Vista3ViewController;
@interface MenuViewController : UIViewController {
GuidaAppDelegate *appDelegate;
IBOutlet UIButton *vista1Button;
IBOutlet UIButton *vista2Button;
IBOutlet UIButton *vista3Button;
}
@property (nonatomic, retain) IBOutlet UIButton *vista1Button;
@property (nonatomic, retain) IBOutlet UIButton *vista2Button;
@property (nonatomic, retain) IBOutlet UIButton *vista3Button;
- (IBAction) performButtonAction:(id)sender;
@end
Come possiamo vedere come attributi delle classi sono presenti tre bottoni dichiarati con la direttiva IBOutlet per poterli poi associare all’interfaccia grafica fatta con Interface Builder.
Di ogni attributo viene dichiarata la property ed un metodo di tipo IBAction (necessario per il collegamento con Interface Builder) che, a seconda del bottone premuto, mostrerà a video la vista scelta dall’utente.
Come abbiamo fatto negli esempi precedenti, useremo l’attriburo sender per capire quale bottone è stato premuto dall’utente.
Adesso spostiamoci nel file di impementazione del MenuViewController ed importiamo i file header relativi al delegato ed ai ViewController delle viste. Dopo aver inserito tutti i synthesize per gli attributi della classe, spostiamoci nel metodo initWithNibName: decommentiamolo ed inseriamo il seguente codice:
if ((self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil])) {
appDelegate = (GuidaAppDelegate *)
[[UIApplication sharedApplication] delegate];
}
return self;
Con il codice sopra riportato, in sostanza, andiamo ad associare al MenuViewController il suo delagato. In questo modo il delegato potrà accedere senza problemi al MenuViewController e, ad esempio, caricare la vista del menù quando l’utente, all’interno della vista, cliccarà il bottone che conduce al menù principale.Vediamo adesso il codice relativo al metodo di gestione delle view:
- (IBAction) performButtonAction:(id)sender{
[self.view removeFromSuperview];
if(sender == vista1Button){
[appDelegate.window addSubview:appDelegate.vista1ViewController.view];
}
if(sender == vista2Button){
[appDelegate.window addSubview:appDelegate.vista2ViewController.view];
}
if(sender == vista3Button){
[appDelegate.window addSubview:appDelegate.vista3ViewController.view];
}
}
Come prima cosa rimuoviamo dalla window la vista del menù. Poi andiamo a controllare (mediante il costrutto if) quale dei tre pulsanti è stato cliccato dall’utente e mostriamo la view corretta.
Come possiamo vedere, per agganciare la view del ViewController alla window, abbiamo utilizzato il delegato e duqnue in ogni file di implementazione dei ViewController delle viste sarà presente lo stesso codice del metodo didFinishLaunchingWithOptions visto precedentemente.
Inserendo, infine, i release nel metodo dealloc abbiamo concluso il codice da inserire nel file di implementazione.