Sviluppo su iPhone (5): la nostra prima applicazione (III)

En il nostro articolo precedente Avevamo incluso un'etichetta, un campo di testo e un pulsante nell'interfaccia della nostra applicazione. Volevamo che il contenuto dell'etichetta fosse aggiornato con quanto inserito nel TextField quando si faceva clic sul pulsante. Avevamo (passaggio 1) creato il progetto e (passaggio 2) utilizzato InterfaceBuilder per definire lo schermo. Ora continueremo con il resto dei passaggi per lasciare l'applicazione funzionante.

Passaggio 3. Creare le variabili nel ViewController.

Abbiamo la nostra interfaccia correttamente. Infatti, se facessimo Build & Go potremmo vedere come stiamo facendo:

Ma ovviamente non succede nulla quando si preme il pulsante, perché non abbiamo fatto gli sviluppi minimi essenziali. In questo passaggio 3 introdurremo le variabili ei metodi in HelloWorldViewController, sia nell'interfaccia (file .h) che nell'implementazione (file .m). Per fare questo, come abbiamo indicato alla fine del post precedente, dobbiamo sapere che TextField corrisponde a una classe UITextField, e Label a una classe UILabel. Queste 2 classi sono all'interno del framework UIKit.

Se non abbiamo chiuso e salvato Interface Builder, lo facciamo e in XCode apriamo il file HelloWorldViewController.h. Il codice in questo momento avrà qualcosa del genere:

Stiamo già esaminando alcuni Objective-C. In questo codice vediamo una dichiarazione di importazione della libreria UIKit, dove si trovano le classi UILabel e UITextField. Vediamo come viene dichiarata l'interfaccia e che si estende dal generico UIViewController di UIKit.

All'interno del codice dell'interfaccia includiamo il seguente codice:

Ora possiamo spiegare cosa abbiamo fatto:

  • Abbiamo dichiarato all'interno del blocco @interface 2 attributi di tipo UILabel e UITextField, rispettivamente con 2 nomi di variabili * label e * textField. Davanti appare IBOutlet. Cos'è tutto questo? Ci spieghiamo. IBOutlet non è un tipo di variabile; è una direttiva che aiuta Interface Builder a conoscere l'esistenza di queste variabili di tipo UILabel e UITextField. A proposito, ricorda che nel precedente articolo ti avevamo dato un trucco per conoscere i tipi di variabili degli oggetti di controllo (pulsanti, etichetta, campo di testo, ecc.) In Interface Builder. D'altra parte, il problema di * davanti al nome della variabile potrebbe sorprendere i programmatori Java, non tanto quelli di C ... ma imparano che è così che scriverete le variabili di istanza in Objective-C.
  • Vengono dichiarate le proprietà UILabel e UITextField. non atomico e ritengo che non vedremo per ora, è legato alla gestione della memoria.
  • Vediamo che dichiariamo un metodo, updateText. Ha un segno - davanti, che indica che si tratta di un metodo di istanza e non di una classe (per loro viene spiegato un segno +). Non possiamo spiegarlo perché questa è una programmazione orientata agli oggetti di base ... Quel metodo non restituisce nulla (cioè void) e riceve un parametro di tipo id. Fondamentalmente si riferisce all'identificativo dell'oggetto che causerà la chiamata al nostro metodo updateTexto, che aggiornerà il valore dell'etichetta. Possiamo indovinare poiché quel controllo sarà il pulsante stesso ...

Fatto ciò, abbiamo finito con il passaggio 3.


Passaggio 4. Associare i controlli di visualizzazione alle variabili del controller.

Se passiamo in rassegna, da un lato abbiamo sviluppato la nostra interfaccia con Interface Builder, e dall'altro abbiamo le variabili relative a quei controlli nel HelloWorldViewController.h (interfaccia della classe controller HelloWorldViewController.m). Tuttavia, non esiste ancora alcuna relazione tra la vista e il controller, ovvero non abbiamo dato alcuna istruzione per mettere in relazione, ad esempio, il campo di testo che progettiamo in Interface Builder con la variabile di tipo UITextField che abbiamo inserito nel classe. Ora faremo questo compito. Apriamo di nuovo Interface Builder facendo clic su HelloWorldViewController.xib, clicchiamo sulla casella di testo e nella tavolozza Inspector andiamo alla seconda scheda (Text Field Connections). Vediamo che c'è una sezione chiamata Referencing Outlets, senza che ci sia nulla di contrassegnato. Ciò significa che al momento Interface Builder non conosce alcuna relazione tra questo campo di testo e un IBOutlet (Interface Builder Outlet) di una classe ... ma abbiamo un UITextField IBOutlet nel nostro HelloWorldViewController, quindi lo collegheremo.

Per fare ciò, come possiamo vedere in figura, cliccando sul piccolo cerchio accanto a «New Referencing Outlet», trasciniamo il File's Owner della finestra denominata HelloWorldViewController.xib. Ci consentirà di scegliere 2 opzioni, view (la visualizzazione completa) e textField (la nostra variabile). Ovviamente scegliamo textField, e quindi correliamo la nostra casella di testo alla variabile del suo tipo UITextField. A proposito, il proprietario del file o il proprietario del file non è né più né meno della nostra classe controller ...

Ripetiamo l'operazione con l'etichetta, mettendola in relazione con l'etichetta della nostra variabile controller. E con il pulsante, è qualcosa di diverso. In questo caso lo metteremo in relazione con la nostra operazione updateTexto, ma per un evento specifico. Fallo con l'evento "Ritocco interno" e scegli il nostro metodo updateTexto:

E in questo modo abbiamo già messo in relazione i controlli che avevamo definito con Interface Builder e le variabili che abbiamo inserito nel controller. Chiudiamo Interface Builder salvando tutto e andiamo all'ultimo passaggio tornando a XCode.

Passaggio 5. Ultimi sviluppi.

In XCode apriamo HelloWorldViewController.my e inseriamo il seguente codice in modo che la nostra classe sia simile a questa:

Se guardiamo da vicino abbiamo semplicemente messo il blocco @synthesize e l'implementazione del metodo dichiarato nell'interfaccia .h, updateTexto. Sotto quel codice avrai molto codice commentato.

La riga @synthesize fa qualcosa di simile alla generazione del tipico getter / setter (accessors / mutator) tipico dei linguaggi OO (incapsulamento). Ne abbiamo bisogno in modo che il controller raggiunga il contenuto, ad esempio, della casella di testo.

Il metodo updateTexto, come puoi vedere, aggiorna semplicemente il testo della nostra etichetta con il contenuto del campo di testo. Abbiamo chiuso.

Ora facciamo semplicemente Build & Go e vedrai che quando inserisci una stringa di testo e fai clic sul pulsante, il contenuto dell'etichetta viene aggiornato. Nel prossimo articolo introdurremo miglioramenti alla nostra applicazione.


Seguici su Google News

Lascia un tuo commento

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati con *

*

*

  1. Responsabile del trattamento: AB Internet Networks 2008 SL
  2. Scopo dei dati: controllo SPAM, gestione commenti.
  3. Legittimazione: il tuo consenso
  4. Comunicazione dei dati: I dati non saranno oggetto di comunicazione a terzi se non per obbligo di legge.
  5. Archiviazione dati: database ospitato da Occentus Networks (UE)
  6. Diritti: in qualsiasi momento puoi limitare, recuperare ed eliminare le tue informazioni.

  1.   Pedro suddetto

    Ottimo tutorial, molto chiaro e semplice.

  2.   rubdotto.com suddetto

    Beh, devo essere molto melone 🙁 perché non funziona per me. Ho catturato il valore in una String e prende il testo ma non lo assegna all'etichetta, almeno non lo dipinge, perché provo a vedere label.text e mi dice fuori ambito ...

  3.   leo2279 suddetto

    Ottimi i tuoi tutorial, spiega davvero molto bene questo sviluppo per iphone, spero che continuerai a pubblicare altri tutorial.

    saluti

  4.   Mariano suddetto

    Ciao, tutto bene, ma non funziona. Per farlo funzionare ho dovuto collegare la vista dell'interfaccia builder con la vista nel cubo, come insegni a fare con il campo di testo e l'etichetta. Per il resto, grazie mille.