In questa lezione andremo ad introdurre uno degli oggetti più utilizzati nello sviluppo di applicazioni iOS: l'UIButtonn
. Questo elemento ha il preciso compito di intercettare i diversi tipi di eventi di tocco dell'utente ed eventualmente richiamare diversi metodi per ogni tipologia di evento ricevuto..
Passiamo adesso all'implementazione di tali oggetti all'interno del nostro progetto. Portiamoci nel filee InsertViewController.hhe dichiariamo due bottoni come attributi di classe nel seguente modo::
UIButtonn*_resetButton;
UIButtonn*_addButton;
Portiamoci adesso nel filee InsertViewController.mme nel solito metodo di init (dopo la dichiarazione dellaa TextViewwche abbiamo visto nella precedente lezione) andiamo ad inserire il seguente codice::
_resetButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
_resetButton.frame = CGRectMake(10, 370, 140, 30);
[_resetButton setTitle:@"Reset" forState:UIControlStateNormal];
[_resetButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
[self.view addSubview:_resetButton];
_addButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
_addButton.frame = CGRectMake(160, 370, 140, 30);
[_addButton setTitle:@"Inserisci" forState:UIControlStateNormal];
[_addButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
[self.view addSubview:_addButton];
Come possiamo vedere, la dichiarazionee è diversa dalle altre dichiarazioni che abbiamo incontrato fino ad ora. Qesto perchè la classee UIButton
ci mette a disposizione il metodo di classe buttonWithType
che consente di specificare il tipo di bottone ottenendo, con poco sforzo, un oggetto graficamente gradevole. Se avessimo usato gli usuali metodi di allocazione e inizializzazionee allocc
e init
avremo dovuto effettuare un po' più di lavoro per avere una resa grafica del bottone migliore.
Continuando con l'analisi del codice, nella linea successiva, viene impostato il frame
dei bottoni e viene impostato il titolo (che è la scritta presente sopra il bottone) ed il colore del testo del bottone quando quest'ultimo si trova nello stato UIControlStateNormal
(che rappresenta lo stato in cui si trova il bottone quando non riceve eventi di tocco).
Effettuando un Run del progetto vedremo i bottoni posizionati correttamente nella parte bassa dello schermo, ma toccandoli non accadrà niente. Questo è ovvio perchèè non abbiamo associato a tali bottoni nessun metodo in risposta ad un evento di tocco.
Quindi, la prima cosa da fare è dichiarare due metodi nel file InsertViewController.h: uno da associare al _resetButton
e uno all'_addButton
. Inseriamo dunque il seguente codice dopo la dichiarazione degli attributi della classe:
-(void)addButtonTapped;
-(void)resetButtonTapped;
A questo punto andiamo ad implementare tali metodi all'interno della classe InsertViewController.m:
- (void)addButtonTapped{
NSLog(@"Button TAPPED !!");
}
- (void)resetButtonTapped{
_originTextField.text = @"";
_nameTextField.text = @"";
_descriptionTextView.text = @"";
}
Sui metodi non c'è da dire molto: nel metodo da associare all'_addButton
per adesso mettiamo solo una stampa sulla console (in un secondo momento salveremo un nuovo oggetto da inserire nella lista), mentre nel metodo da associare al _resetButton
semplicemente inseriamo una stringa vuota nei due TextField e nella TextView.
A questo punto non ci resta che associare tali metodi ai bottoni. Sempre nella classe InsertViewController.m e dopo la definizione del frame dei bottoni aggiungiamo rispettivamente:
[_resetButton addTarget:self action:@selector(resetButtonTapped) forControlEvents:UIControlEventTouchUpInside];
[_addButton addTarget:self action:@selector(addButtonTapped) forControlEvents:UIControlEventTouchUpInside];
Il metodo utilizzato consta di tre parametri che analizziamo singolarmente:
addTarget
: rappresenta l'oggetto target a cui il bottone invierà il messaggio in seguito alla ricezione di un evento di tocco (nel nostro caso la classeInsertViewController
).action
: rappresenta il metodo che deve essere invocato dopo la ricezione dell'evento di tocco. Per far ciò usiamo il costrutto@selector
che serve a richiamare un metodo appartenente ad una classe.forControlEvent
: rappresenta il tipo di evento di tocco. Nel nostro caso abbiamo scelto l'eventoUIControlEventTouchUpInside
che rappresenta l'evento di tocco associato alla pressione del bottone e rilascio sempre all'interno dell'area del bottone. Nulla vieta al lettore di definire altri metodi da associare al bottone per diversi tipi di evento.che rappresenta l'evento di tocco associato alla pressione del bottone e rilascio sempre all'interno dell'area del bottone. Nulla vieta al lettore di definire altri metodi da associare al bottone per diversi tipi di evento.