Tutti i tutorial per lo svillupo su iphone iniziano con “aprite interface builder e trascinate una UILabel..” ma cosa sono in realtà le UILabel? Le UILabel fanno parte della gerarchia dell’UIKit framework che la Apple ci mette a disposizione.
Come possiamo vedere in questa immagine, ereditano direttamente da UIView che a loro volta ereditano da UIResponder e da NSObject. Capire a quale livello della gerarchia è posizionata la classe che stiamo analizzando è indispensabile per capire subito quali sono i metodi e proprietà che possiamo utilizzare.
In realtà se utilizzassimo le label esclusivamente trascinandole da interface builder potremmo ignorare tutto questo, ma poichè noi sviluppatori non viviamo bene senza righe di codice, vediamo in dettagli come creare ed impostare una label a runtime.
La prima cosa da fare sarà dichiarare un oggetto di tipo UILabel, allocarlo ed inizializzarne il valore, tutto questo viene fatto con queste istruzioni:
UILabel *newLabel = [[UILabel alloc] initWithFrame:CGRectMake(20, 30, 200, 100)];
Il metodo “alloc” è ereditato dalla classe NSObject e si occupa semplicemente di riservare nella memoria sufficiente spazio per allocare un oggetto di tipo UILabel, mentre il metodo “initWithFrame” è un metodo della classe UIView che inizializza e ritorna un nuovo oggetto di tipo UIView delle dimensioni e nella posizione specificata dal parametro.
Qualcuno si sta chiedendo “Ma noi serve una UILabel..se initiWithFrame restituisce una UIView che me ne faccio??”…io potrei rispondere con un altra domanda “se alloc restituisce un NSObject come mai lo utilizziamo con qualsiasi oggetto??”…la risposta è che è proprio questo il bello della programmazione ad oggetti, la UILabel è una sottoclasse di UIView quindi è una UIView…e possiamo utilizzarla come e dove è previsto l’utilizzo di una UIView. Questo è da tenere bene a mente perché è un pilastro importante della programmazione ad oggetti.
CGRectMake(x,y,width,height) fa parte di un altro framework, il quarz2d, e al momento sorvoliamo sul suo utlizzo, quello che ci serve sapere è che restituisce un rettangolo (CGRect) il cui angolo superiore sinistro è posizionato nel punto di coordinate x,y e che ha una larghezza pari a width pixel ed un’altezza di height pixel. (Trovate qui su devAPP un tutorial fatto veramente bene)
Una volta dichiarata, allocata ed inizializzata la nostra UILabel non resta che visulizzarla, richiamiamo quindi il metodo addSubView sulla vista che dovrà contenerla. (addSubView come parametro vuole una UIView..a questo punto dovrebbe essere chiaro perchè possiamo passargli una UILabel..)
[self.view addSubview:newLabel];
Vediamo ora una serie di proprietà che possono essere impostate per modificare l’aspetto della UILabel:
Una piccola nota, poiché sono dichiarate come proprietà possiamo accedervi in lettura e scrittura tramite l’operatore “.” (punto) non è necessario utilizzare metodi set e get.
NOME | DESCRIZIONE | ESEMPIO |
text | Imposta la stringa di testo visulizzata nella UILabel |
myLabel.text = @"Ciao mondo" |
font | Imposta il font |
myLabel.font = [UIFont boldSystemFontOfSize:25]; |
textColor | Imposta il colore del testo |
myLabel.textColor = [UIColor blueColor]; |
textAlignment | Imposta l’allineamento del testo |
myLabel.textAlignment = UITextAlignmentCenter; |
enabled | Specifica se la UILabel è abilitata o meno. Attenzione: il getter per questa proprietà è “isEnabled”. |
myLabel.enabled = FALSE; myboolValue = [mylabel isEnabled]; |
Per le altre proprietà vi rimando alla UILabel class reference ufficiale apple che trovate a questo indirizzo:
19 Responses to “UILabel – Guida completa all’uso.”
26 Febbraio 2010
guyma io vorrei sapere una volta fatta l’applicazione come faccio a caricarla sul mio dispositivo?
26 Febbraio 2010
IgnaziocPer caricare le app sul tuo iPhone devi registrarti come developer. Il costo è di 99 dollari l’anno. Trovi una guida su questo stesso sito
26 Febbraio 2010
NeoBellissima iniziativa… se ci fate una guida per ogni oggetto è il massimo!!!
Complimenti per la guida.. continuate così!!!
26 Febbraio 2010
Fede81Quindi se un’ UILabel è un’ UIView posso usare tutte le proprietà e i metodi delle View?
26 Febbraio 2010
Ignazioccertamente! questo è un concetto base della OOP. le UILabel sono anche UIView, ma anche UIResponder e NSObjects.
Per esempio il metodo “retainCount” che restituisce il valore dell’omonima proprietà è dichiarato nella classe NSObjects ma può essere richiamato a partire da qualsiasi oggetto che derivi da NSObject.
26 Febbraio 2010
LuigiComplimenti ignazioc ottima guida.
Se riesci a farne altre non è affatto male…anche io che sono abbastanza pratico a volte faccio casini…anche perchè sono molto primo e non ho voglia di leggermi la documentazione 😀
26 Febbraio 2010
Luigipigro…nn primo 😀
26 Febbraio 2010
MonkScusate la mia ignoranza, ma sono nuovo. Anche le uilabel possono essere personalizzate graficamente come avete spiegato nella guida precedente sui textfield?
26 Febbraio 2010
Ignaziocgrazie a tutti, perchè non proponete un argomento oggetto da studiare nel prossimo tutorial? UIButton?
@Monk: no, le UILabel di default posseggono meno proprietà delle textfield, di solito si usa mettere delle imgview sotto le label per personalizzarle.
27 Febbraio 2010
MonkAh ok.. Quindi lo sfondo della label trasparente fa vedere l’immagine sotto.. Bella, non ci avevo mai pensato! Grazie.. Ne attendiamo altri allora 🙂 anche uibutton grazie ancora
27 Febbraio 2010
tbellostaOttima guida ma credo che per i label continuerò a usare IB
27 Febbraio 2010
ignazioccomodista!! 🙂 🙂
1 Marzo 2010
andreaAppCodeUIButton sarebbe una figata…. mi sto perdendo un po nel realizzare bottone personalizzati…:) magari cosi ne capisco di piu…
grazie mille!!
1 Marzo 2010
ignaziocok, prossimo tutorial UIButton.
una risposta al volo: metti una immagine sotto e crea un bottone trasparente..risolvi in un attimo 🙂
9 Aprile 2010
andreaAppCodeallora non sono l’unico che fa cosi..:) che ne dici di pickerView nel prox??
15 Marzo 2011
roccocomplimenti per la guida..
devo fare il parsing di un file XML e volevo inserire il titolo in una UILabel
– (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
if ([tag isEqualToString:@”titolo”]){
UILabel *titolo=[[UILabel alloc]initWithFrame:CGRectMake(80.0f, 88.0f, 320.0f, 44.0f)];
titolo.text=string;
[self.view addSubview:titolo];
}
}
ma non scrive assolutamente niente
qualche idea??
15 Marzo 2011
IgnaziocTi consiglio di fare le domande sul forum, non nei commenti.
Ci sono un pò di cose che non vanno nel tuo codice, non è bellissima l’idea di creare una label durante il parsing di un file xml..in questo modo mescoli dati e interfaccia…poi cosa succederebbe se ci fossero due tag “titolo”? creeresti due label nello stesso punto?
Venendo più allo specifico…la variabile “tag” non è definita in questo spezzone di codice, quindi non potrebbe funzionare, inoltre il metodo
– (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
non è adatto a fare quello che chiedi, perché come dice la documentazione:
The parser object may send the delegate several parser:foundCharacters: messages to report the characters of an element. Because string may be only part of the total character content for the current element, you should append it to the current accumulation of characters until the element changes.
Quindi non hai l’elemento completo, ma solo una parte che devi “accumulare” da qualche parte.
Ciao
18 Maggio 2014
RiccardoMCiao a tutti,
sto cercando di capire da più o meno mezz’ora come aggiungere al text di una UIlabel oltre alla stringa “hardcoded” anche una variabile. Mi spiego meglio : label.text = @”La data è :” variabileData; Qual’è la formattazione corretta???
Vi ringrazio molto e scusate il disturbo
7 Giugno 2014
IgnazioCDevi usare la costruzione della stringa, cioè qualcosa tipo label.text = [NSString stringWithformat:@”Il valore della variabile è: %d”, miaVariabile];
ciao