Entwicklung auf dem iPhone (5): unsere erste Anwendung (III)

En unser vorheriger Artikel Wir hatten ein Label, ein TextField und einen Button in die Oberfläche unserer Anwendung aufgenommen. Wir wollten, dass der Inhalt des Etiketts mit dem aktualisiert wird, was beim Klicken auf die Schaltfläche in das Textfeld eingegeben wurde. Wir hatten (Schritt 1) ​​das Projekt erstellt und (Schritt 2) InterfaceBuilder verwendet, um den Bildschirm zu definieren. Jetzt werden wir mit den restlichen Schritten fortfahren, damit die Anwendung funktioniert.

Schritt 3. Erstellen Sie Variablen im ViewController.

Wir haben unsere Schnittstelle richtig. Wenn wir Build & Go machen würden, könnten wir sehen, wie es aussieht:

Aber offensichtlich passiert nichts, wenn der Knopf gedrückt wird, weil wir nicht die wesentlichen Mindestentwicklungen vorgenommen haben. In diesem Schritt 3 werden wir die Variablen und Methoden im HelloWorldViewController sowohl in der Schnittstelle (.h-Datei) als auch in der Implementierung (.m-Datei) einführen. Dazu müssen wir, wie am Ende des vorherigen Beitrags angegeben, wissen, dass das TextField einer UITextField-Klasse und das Label einer UILabel-Klasse entspricht. Diese beiden Klassen befinden sich im UIKit-Framework.

Wenn wir Interface Builder nicht geschlossen und gespeichert haben, tun wir dies und öffnen in XCode die Datei HelloWorldViewController.h. Der Code wird jetzt ungefähr so ​​aussehen:

Wir sehen uns bereits einige Objective-C an. In diesem Code sehen wir eine Importdeklaration der UIKit-Bibliothek, in der sich die Klassen UILabel und UITextField befinden. Wir sehen, wie die Schnittstelle deklariert wird und dass sie sich vom generischen UIViewController von UIKit erstreckt.

Der Schnittstellencode enthält den folgenden Code:

Wir können jetzt erklären, was wir getan haben:

  • Wir haben innerhalb des Blocks @interface 2 Attribute vom Typ UILabel und UITextField mit 2 Variablennamen * label bzw. * textField deklariert. Vor uns erscheint IBOutlet. Was ist das alles? Wir erklären uns. IBOutlet ist kein Variablentyp. ist eine Direktive, die Interface Builder hilft, die Existenz dieser Variablen vom Typ UILabel und UITextField zu erkennen. Denken Sie übrigens daran, dass wir Ihnen im vorherigen Artikel einen Trick gegeben haben, um die Variablentypen der Steuerobjekte (Schaltflächen, Beschriftung, Textfeld usw.) in Interface Builder zu kennen. Andererseits kann das Problem des * vor dem Variablennamen Java-Programmierer überraschen, nicht so sehr die von C ... aber lernen Sie, dass Sie auf diese Weise Instanzvariablen in Objective-C schreiben.
  • Die Eigenschaften UILabel und UITextField werden deklariert. Nichtatomar und behalten werden wir vorerst nicht sehen, es hängt mit der Speicherverwaltung zusammen.
  • Wir sehen, dass wir eine Methode deklarieren, updateText. Davor befindet sich ein - -Zeichen, das angibt, dass es sich um eine Instanzmethode und nicht um eine Klassenmethode handelt (für sie wird ein + -Zeichen erläutert). Wir können dies nicht erklären, da dies eine grundlegende objektorientierte Programmierung ist ... Diese Methode gibt nichts zurück (dh nichtig) und empfängt einen Parameter vom Typ id. Grundsätzlich bezieht es sich auf die Kennung des Objekts, die den Aufruf unserer updateTexto-Methode verursacht, die den Wert des Labels aktualisiert. Wir können raten, da dieses Steuerelement der Knopf selbst sein wird ...

Sobald dies erledigt ist, sind wir mit Schritt 3 fertig.


Schritt 4. Binden Sie Ansichtssteuerelemente an Controller-Variablen.

Wenn wir dies überprüfen, haben wir einerseits unsere Schnittstelle mit Interface Builder entwickelt und andererseits haben wir die Variablen, die sich auf diese Steuerelemente beziehen, in der HelloWorldViewController.h (Schnittstelle der Controller-Klasse HelloWorldViewController.m). Es besteht jedoch immer noch keine Beziehung zwischen der Ansicht und dem Controller. Das heißt, wir haben keine Anweisungen gegeben, um beispielsweise das Textfeld, das wir in Interface Builder entwerfen, mit der Variablen vom Typ UITextField zu verknüpfen, die wir in das Feld eingegeben haben Klasse. Jetzt werden wir diese Aufgabe erledigen. Wir öffnen den Interface Builder erneut, indem wir auf HelloWorldViewController.xib klicken, auf das Textfeld klicken und in der Inspektorpalette zur zweiten Registerkarte (Textfeldverbindungen) wechseln. Wir sehen, dass es einen Abschnitt namens Referenzieren von Outlets gibt, ohne dass etwas markiert ist. Das bedeutet, dass Interface Builder derzeit keine Beziehung zwischen diesem Textfeld und einem IBOutlet (Interface Builder Outlet) einer Klasse kennt ... aber wir haben ein UITextField IBOutlet in unserem HelloWorldViewController, also werden wir es verknüpfen.

Um dies zu tun, ziehen wir, wie in der Abbildung gezeigt, durch Klicken auf den kleinen Kreis neben «New Referencing Outlet» zum Eigentümer der Datei des Fensters HelloWorldViewController.xib. Damit können wir zwei Optionen auswählen: Ansicht (Vollansicht) und Textfeld (unsere Variable). Offensichtlich wählen wir textField und verknüpfen daher unser Textfeld mit der Variablen vom Typ UITextField. Übrigens ist der Eigentümer der Datei oder der Eigentümer der Datei weder mehr noch weniger als unsere Controller-Klasse ...

Wir wiederholen den Vorgang mit dem Label und beziehen es auf unser Controller-Variablen-Label. Und mit dem Knopf ist es etwas anderes. In diesem Fall werden wir es auf unsere updateTexto-Operation beziehen, jedoch für ein bestimmtes Ereignis. Tun Sie dies mit dem 'Touch Up Inside'-Ereignis und wählen Sie unsere updateTexto-Methode:

Auf diese Weise haben wir bereits die Steuerelemente, die wir mit Interface Builder definiert hatten, und die Variablen, die wir in den Controller eingegeben haben, verknüpft. Wir schließen den Interface Builder, speichern alles und fahren mit dem letzten Schritt fort, um zu XCode zurückzukehren.

Schritt 5. Neueste Entwicklungen.

In XCode öffnen wir die Datei HelloWorldViewController.my und geben den folgenden Code ein, damit unsere Klasse so aussieht:

Wenn wir genau hinschauen, haben wir einfach den Block @synthesize und die Implementierung der in der Schnittstelle .h, updateTexto deklarierten Methode eingefügt. Unter diesem Code finden Sie viele kommentierte Codes.

Die Zeile @synthesize hat etwas Ähnliches wie das Generieren des typischen Getters / Setters (Accessors / Mutators), der für OO-Sprachen typisch ist (Kapselung). Wir brauchen sie, damit der Controller den Inhalt beispielsweise des Textfelds erreicht.

Wie Sie sehen, aktualisiert die updateTexto-Methode einfach den Text unseres Etiketts mit dem Inhalt des Textfelds. Wir sind fertig.

Jetzt machen wir einfach Build & Go und Sie werden sehen, dass der Inhalt des Etiketts aktualisiert wird, wenn Sie eine Textzeichenfolge eingeben und auf die Schaltfläche klicken. Im nächsten Artikel werden wir Verbesserungen an unserer Anwendung vorstellen.


Folgen Sie uns auf Google News

Hinterlasse einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert mit *

*

*

  1. Verantwortlich für die Daten: AB Internet Networks 2008 SL
  2. Zweck der Daten: Kontrolle von SPAM, Kommentarverwaltung.
  3. Legitimation: Ihre Zustimmung
  4. Übermittlung der Daten: Die Daten werden nur durch gesetzliche Verpflichtung an Dritte weitergegeben.
  5. Datenspeicherung: Von Occentus Networks (EU) gehostete Datenbank
  6. Rechte: Sie können Ihre Informationen jederzeit einschränken, wiederherstellen und löschen.

  1.   Pedro sagte

    Sehr gutes Tutorial, sehr klar und einfach.

  2.   rubdotto.com sagte

    Nun, ich muss sehr melonisch sein, weil es bei mir nicht funktioniert. Ich habe den Wert in einem String erfasst und er nimmt den Text auf, weist ihn jedoch nicht dem Label zu, zumindest malt er ihn nicht, da ich versuche, den label.text zu sehen, und er sagt mir, dass er außerhalb des Gültigkeitsbereichs liegt ...

  3.   leo2279 sagte

    Hervorragend Ihre Tutorials, es erklärt wirklich sehr gut diese Entwicklung für iPhone, ich hoffe, Sie veröffentlichen weiterhin weitere Tutorials.

    Grüße

  4.   Mariano sagte

    Hallo, alles cool, aber es funktioniert nicht. Damit es funktioniert, musste ich die Ansicht des Interface Builders mit der Ansicht im Cube verknüpfen, wie Sie es mit dem Textfeld und der Beschriftung lernen. Für den Rest vielen Dank.