In questo tutorial vedremo uno dei tanti modi possibili di gestire più viste all’interno delle nostre applicazioni. Per far ciò creeremo una classe, la cui superclasse sarà UIViewController che si occuperà avviare la vista principale e conterrà il codice per navigare tra le varie viste disponibili. Apriamo Xcode, creiamo un nuovo progetto e dall’elenco dei template disponibili scegliamo “Window-based Application”. Clicchiamo col pulsante destro del mouse su “Classes” in “Groups & Files”, quindi su “Add” e su “New File…”, dalla finestra che si apre clicchiamo su “UIViewController subclass” e premiamo il pulsante “Next” per proseguire. Diamo un nome al nuovo file, ad esempio “controllerViste”, facciamo attenzione che sia selezionata l’opzione “Also create controllerViste.h” e clicchiamo su “Finish”. Apriamo il file “controllerViste.h” appena creato e inseriamo il seguente codice:
#import
@interface controllerViste : UIViewController {
IBOutlet UIView *vistaUno;
IBOutlet UIView *vistaDue;
IBOutlet UIView *vistaTre;
}
@property (nonatomic, retain) IBOutlet UIView *vistaUno;
@property (nonatomic, retain) IBOutlet UIView *vistaDue;
@property (nonatomic, retain) IBOutlet UIView *vistaTre;
-(IBAction)vaiUno;
-(IBAction)vaiDue;
-(IBAction)vaiTre;
@end
Così facendo abbiamo creato 3 oggetti IBOutlet di tipo UIView che saranno collegati alle nostre viste che definiremo successivamente tramite Interface Builder. Abbiamo inoltre dichiarato i 3 metodi che ci permetteranno di navigare tramite le viste della nostra applicazione e che collegheremo ai 3 UIButton che implementeremo nella nostra interfaccia tramite IB più avanti. Apriamo ora il file di implementazione della nostra classe, “controllerViste.m” e inseriamo il codice dei metodi appena dichiarati nel file di interfaccia:
@synthesize vistaUno, vistaDue, vistaTre;
-(IBAction)vaiUno{
self.view = vistaUno;
}
-(IBAction)vaiDue{
self.view = vistaDue;
}
-(IBAction)vaiTre{
self.view = vistaTre;
}
- (void)viewDidLoad {
[super viewDidLoad];
self.view = vistaUno;
}
Come vedete il codice per i 3 metodi è molto semplice e non fa altro che mostrare la rispettiva vista. Abbiamo inoltre “scommentato” il metodo viewDidLoad e abbiamo impostato la vista principale che si aprirà all’avvio dell’applicazione. Salviamo, apriamo “myViewAppDelegate.h” e modifichiamo il codice come segue:
#import
@interface myViewAppDelegate : NSObject {
UIWindow *window;
UIViewController *controllerViste;
}
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UIViewController *controllerViste;
@end
Abbiamo semplicemente aggiunto un oggetto di tipo “UIViewController” di nome “controllerViste” e dichiarato la rispettiva “property”. Apriamo quindi “myViewAppDelegate.m” e modifichiamolo come segue:
#import "myViewAppDelegate.h"
@implementation myViewAppDelegate
@synthesize window, controllerViste;
- (void)applicationDidFinishLaunching:(UIApplication *)application {
// Override point for customization after application launch
[window addSubview:controllerViste.view];
[window makeKeyAndVisible];
}
- (void)dealloc {
[controllerViste release];
[window release];
[super dealloc];
}
@end
Per quanto riguarda il codice è tutto. Apriamo Interface Builder facendo doppio click sul file “MainWindow.xib” e iniziamo a creare le nostre viste. Per prima cosa inseriamo un UIViewController e 3 UIView nel progetto facendo semplicemente doppio click su questi oggetti dalla “Library”. Trasciniamo quindi la prima vista dentro il nostro UIViewController. Dobbiamo ottenere una configurazione come quella mostrata in figura (non fate caso al nome “Controller Viste” in figura, voi al suo posto avrete “View Controller”):
Clicchiamo quindi su “View Controller”, apriamo la finestra “View Controller Identity” e selezioniamo “controllerViste” dall’elenco a scelta multipla “Class”. Apriamo ora le UIView una alla volta e inseriamo all’interno di ognuna 1 UILabel, impostado la sua proprietà “Text” con il numero che identifica la vista, e 2 UIButton inserendo nella proprietà “Title” rispettivamente “Vai alla vista 1”, “Vai alla vista 2” o “Vai alla vista 3” in base alla View in cui vi trovate. Dovete ottenere 3 View simili all’esempio qui sotto:
Ora dobbiamo effettuare i collegamenti tra gli oggetti appena creati e i rispettivi dichiarati via codice in Xcode. Cliccate quindi su “Controller Viste” e dalla finestra “Controller Viste Connection” effettuate i collegamenti come mostrato nella prossima immagine:
Collegando i metodi ai pulsanti, che come potete vedere hanno collegamenti multipli, fate attenzione a selezionare “Touch Up Inside” dal menù che compare rilasciando il mouse durante il collegamento. Fate inoltre attenzione a collegare correttamente le viste. Per l’ultimo collegamento in figura, nella categoria “Referencing Outlets”, dovete cliccare su “My View App Delegate” e dalla finestra “My View App Delegate Connections” collegate l’Outlet “controllerViste” con “Controller Viste”. Potete ora salvare e chiudere Interface Builder. Torniamo su Xcode e premiamo “Build and Run” per testare la nostra applicazione su iPhone Simulator o direttamente sul nostro dispositivo. Il risultato è mostrato nella prossima e ultima immagine:
Video Tutorial
by David Pollak
25 Responses to “T#009 – Gestiamo più viste”
18 Novembre 2009
Tweets that mention T#009 – Gestiamo più viste | devAPP -- Topsy.com[…] This post was mentioned on Twitter by MitAPP, devAPP. devAPP said: Nuovo Tutorial online: "Gestiamo più viste" http://www.devapp.it/wordpress/t009-gestiamo-piu-viste.html […]
18 Novembre 2009
AnderoliMolto chiaro, ma se volessi che le viste “scorressero” o volessi dare un’animazione per passare da una vista all’altra?
19 Novembre 2009
Il ProfetaCiao Anderoli! E’ ormai un paio di mesi buoni che mi picchio con xcode (quindi NON sono un guru) comunque in questo tutorial gestiamo varie “viste” le quali vengono applicate su un solo file xib (MainWindow.xib).
Ma questo tutorial ci mostra una sola delle due possibilità di gestire vari “FORM”, invece di usare uno XIB con tante view c’è anche la possibilità di usare un file xib per ogni singola View! Quindi 5 form = 5 view e 5 file XIB.
Con questo ultimo metodo è possibile integrare vari effetti visivi (transizioni) tra un ipotetico passaggio dalla View1 alla View2.
Per qualsiasi altra info sono QUI! 😉
20 Novembre 2009
Staff devAPPNei prossimi tutorial affronteremo altre tecniche per la gestione di più viste nelle nostre applicazioni 😉
21 Marzo 2010
Appoi file di esempio non puoi caricarli?
21 Marzo 2010
millenomiIl contratto di UIViewController specifica che un VC può settare la propria .view SOLO E SOLTANTO in -loadView (o attraverso il NIB, che è lo stesso poiché viene fatto dall’implementazione di default di loadView).
Il metodo giusto è avere una vista contenitore come .view e poi effettuare addSubview:/removeFromSuperview con le viste ausiliare.
26 Marzo 2010
iManuHo seguito il tutorial in tutti i suoi punti ma alla fine mi son arenato.
All’avvio dell’applicazione mi da pagina bianca! Senza caricare la prima view.
Il codice non mi segnala errori, in Interface Builder ho effettuato tutti i collegamenti….dove posso ancora controllare?
Grazie
26 Marzo 2010
Staff devAPPApri un topic sul forum e se puoi postaci un link al progetto che gli diamo un’occhiata 😉
29 Marzo 2010
Video Tutorial di programmazione iPhone SDK (in italiano) | devAPP[…] In questo tutorial vedremo uno dei tanti modi possibili di gestire più viste all’interno delle nostre applicazioni. Per far ciò creeremo una classe, la cui superclasse sarà UIViewController che si occuperà avviare la vista principale e conterrà il codice per navigare tra le varie viste disponibili. (visualizza l’articolo completo) […]
5 Aprile 2010
BQuadraComplimenti! bella e utile 😀 ciao
31 Maggio 2010
Giuseooevolevo solo sapere perchè il tutorial video è diverso cioè finziona anche senza modificare #import “myViewAppDelegate.h”, vorrei sapere se è la stessa cosa?
9 Novembre 2010
FPGran bella guida! complimenti! ho seguito il video e devo dire che mi sono trovato molto molto bene! grazie!! 🙂
6 Dicembre 2010
devAPP – Tutorial Set #2 - iPhone Italia – Il blog italiano sull'Apple iPhone 4, iPhone 3GS e 3G[…] (Vai al tutorial completo) […]
24 Dicembre 2010
Vincenzo FerraraCiao, Questo sito mi sta dando veramente dei buoni spunti.:)
Vengo al punto: Come si fa a inserire, al posto di una UIView, una UITabView?
L’applicazione si pianta, non carica nemmeno la prima view…
Grazie..:) Buon Natale.
24 Dicembre 2010
Vincenzo Ferrarascusate, non una UITabView ma una UITableView..
30 Dicembre 2010
Vincenzo FerraraHo risolto, grazie..:)
1 Gennaio 2011
Gianlucaciao a tutti, sarei interessato a capire come passare da una view presente nella relativa xib ad un’altra view presenta in un’altra xib.
Quindi il passaggio da una view all’altra senza avere le view in un solo file xib.
E’ possibile?
Esiste un tutorial?
Grazie mille
31 Gennaio 2011
AlexCiao,
grazie per tutti questi tutorials, sei molto bravo a spiegare!
Volevo però dirti che spesso il codice riportato nell’articolo non è identico a quello del video. Qui ad esempio UIViewController si chiama ControllerVista e non CambioVista e questo, anche se è banale, al neofita come me induce confusione, perchè genera errori sul compilatore (scoperto l’arcano, ho risolto subito 😉 )
Grazie ancora, spero continuate con tutorials sempre più complicati, fino alla realizzazione di applicazioni complete.
20 Marzo 2011
MatteoPotete caricare il progetto? Ho avuto qualche problema e vorrei cercare di risolverlo…grazie mille!
20 Marzo 2011
MatteoQUESTO è IL MIO CODICE:
Qualcuno mi dice dove sbaglio?
Già al secondo passaggio ho “13” errori… 🙁
“#import “CambioVistaViewController.h”
@implementation CambioVistaViewController
@synthesize vistaUno, vistaDue, vistaTre;
-(IBAction)vaiUno{
self.view = vistaUno;
}
-(IBAction)vaiDue{
self.view = vistaDue;
}
-(IBAction)vaiTre{
self.view = vistaTre;
}
– (void)dealloc
{
[super dealloc];
}
– (void)didReceiveMemoryWarning
{
// Releases the view if it doesn’t have a superview.
[super didReceiveMemoryWarning];
// Release any cached data, images, etc that aren’t in use.
}
#pragma mark – View lifecycle
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
– (void)viewDidLoad {
[super viewDidLoad];
self.view = vistaUno;
}
– (void)viewDidUnload
{
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}
– (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Return YES for supported orientations
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
@end”
21 Marzo 2011
manuelocoIl punto e virgola “;” dopo vaiUno,Due,Tre…. ti consiglio di guardare il video che spiega meglio questo metodo visto che è un po diverso di quello scritto…
24 Maggio 2011
MaveDevGrazie anche per questo tutorial, molto utile la gestione di piu’ view
9 Gennaio 2012
StefanoCiao a tutti, vi ringrazio molto per il tutorial, perchè essendo veramente nuovo di Xcode non sapevo da dove cominciare, ho un problema, ho seguito attentamente il videotutorial, ma alla fine quando quando lancio il simulatore, mi compare una pagina bianca e sta ferma lì e non so il perchè.
Quindi cercavo il vostro aiuto.
Grazie
20 Maggio 2013
antoniociao,
ho inserito in una delle 3 viste un iAd banner ma non funziona, mi da l’errore ADBannerView must be part of a view hierarchy managed by a UIViewController.
Aiuto!! Cosa significa?
20 Maggio 2013
antonioCiao,
Ho inserito in una delle 3 viste un iAd banner ma non funziona, mi da l’errore ADBannerView must be part of a view hierarchy managed by a UIViewController.
Cosa significa?
Antonio.