Ανάπτυξη στο iPhone (5): η πρώτη μας εφαρμογή (III)

En το προηγούμενο άρθρο μας Είχαμε συμπεριλάβει μια ετικέτα, ένα πεδίο κειμένου και ένα κουμπί στη διεπαφή της εφαρμογής μας. Θέλαμε το περιεχόμενο της ετικέτας να ενημερώνεται με αυτό που έχει εισαχθεί στο TextField όταν κάνετε κλικ στο κουμπί. Είχαμε (βήμα 1) δημιουργήσει το έργο και (βήμα 2) χρησιμοποιήσαμε το InterfaceBuilder για να ορίσουμε την οθόνη. Τώρα θα συνεχίσουμε με τα υπόλοιπα βήματα για να αφήσουμε την εφαρμογή να λειτουργεί.

Βήμα 3. Δημιουργήστε μεταβλητές στο ViewController.

Έχουμε τη διεπαφή μας σωστά. Στην πραγματικότητα, εάν κάναμε το Build & Go, θα μπορούσαμε να δούμε πώς φαίνεται:

Αλλά προφανώς δεν συμβαίνει τίποτα όταν πατάμε το κουμπί, επειδή δεν έχουμε κάνει τις ελάχιστες βασικές εξελίξεις. Σε αυτό το βήμα 3 θα εισαγάγουμε τις μεταβλητές και τις μεθόδους στο HelloWorldViewController, τόσο στη διεπαφή (αρχείο .h) όσο και στην υλοποίηση (αρχείο .m). Για να γίνει αυτό, όπως υποδείξαμε στο τέλος της προηγούμενης ανάρτησης, πρέπει να γνωρίζουμε ότι το TextField αντιστοιχεί σε μια κλάση UITextField και η ετικέτα σε μια κλάση UIL. Αυτές οι 2 τάξεις βρίσκονται στο πλαίσιο UIKit.

Εάν δεν έχουμε κλείσει και αποθηκεύσει το Interface Builder, το κάνουμε και στον XCode ανοίγουμε το αρχείο HelloWorldViewController.h. Ο κωδικός αυτή τη στιγμή θα έχει κάτι τέτοιο:

Εξετάζουμε ήδη κάποιο Objective-C. Σε αυτόν τον κώδικα βλέπουμε μια δήλωση εισαγωγής από τη βιβλιοθήκη UIKit, όπου βρίσκονται οι κατηγορίες UILabel και UITextField. Βλέπουμε πώς δηλώνεται η διεπαφή και ότι εκτείνεται από το γενικό UIViewController του UIKit.

Στον κώδικα διασύνδεσης συμπεριλαμβάνουμε τον ακόλουθο κώδικα:

Μπορούμε τώρα να εξηγήσουμε τι έχουμε κάνει:

  • Έχουμε δηλώσει στο @interface block 2 χαρακτηριστικά του τύπου UILabel και UITextField, με 2 μεταβλητές ονόματα * label και * textField αντίστοιχα. Μπροστά εμφανίζεται το IBOutlet. Τι είναι όλα αυτά; Εξηγούμε τον εαυτό μας. Το IBOutlet δεν είναι τύπος μεταβλητής. είναι μια οδηγία που βοηθά το Interface Builder να γνωρίζει την ύπαρξη αυτών των μεταβλητών τύπου UILabel και UITextField. Παρεμπιπτόντως, θυμηθείτε ότι στο προηγούμενο άρθρο σας είχαμε δώσει ένα τέχνασμα για να μάθετε τους μεταβλητούς τύπους των αντικειμένων ελέγχου (κουμπιά, ετικέτα, πεδίο κειμένου κ.λπ.) στο Interface Builder. Από την άλλη πλευρά, το ζήτημα του * μπροστά από το όνομα της μεταβλητής μπορεί να εκπλήξει τους προγραμματιστές Java, όχι τόσο αυτούς του C ... αλλά να μάθουν ότι έτσι θα γράψετε μεταβλητές παρουσίας στο Objective-C.
  • Οι ιδιότητες UILabel και UITextField δηλώνονται. μη ατομικό και διατηρούμε που δεν θα δούμε προς το παρόν, σχετίζεται με τη διαχείριση μνήμης.
  • Βλέπουμε ότι δηλώνουμε μια μέθοδο, το updateText. Έχει ένα πρόσημο μπροστά του, υποδεικνύοντας ότι είναι μια μέθοδος παρουσίας και όχι μια μέθοδος τάξης (εξηγείται ένα σύμβολο + για αυτούς). Δεν μπορούμε να το εξηγήσουμε αυτό γιατί είναι βασικός αντικειμενοστρεφής προγραμματισμός ... Αυτή η μέθοδος δεν επιστρέφει τίποτα (δηλαδή, άκυρο) και λαμβάνει μια παράμετρο τύπου id. Βασικά αναφέρεται στο αναγνωριστικό του αντικειμένου που θα προκαλέσει την κλήση στη μέθοδο updateTexto, η οποία θα ενημερώσει την τιμή της ετικέτας. Μπορούμε να μαντέψουμε αφού αυτός ο έλεγχος θα είναι το ίδιο το κουμπί ...

Μόλις γίνει αυτό, τελειώσαμε με το βήμα 3.


Βήμα 4. Bind View Controls to Controller Variables.

Εάν αναθεωρήσουμε, αφενός έχουμε αναπτύξει τη διεπαφή μας με το Interface Builder και, αφετέρου, έχουμε τις μεταβλητές που σχετίζονται με αυτά τα στοιχεία ελέγχου στο HelloWorldViewController.h (διεπαφή της κλάσης ελεγκτή HelloWorldViewController.m). Ωστόσο, εξακολουθεί να μην υπάρχει σχέση μεταξύ της προβολής και του ελεγκτή, δηλαδή, δεν έχουμε δώσει οδηγίες για να συσχετίσετε, για παράδειγμα, το πεδίο κειμένου που σχεδιάζουμε στο Interface Builder με τη μεταβλητή του τύπου UITextField που έχουμε βάλει στο τάξη. Τώρα πρόκειται να κάνουμε αυτό το έργο. Ανοίγουμε ξανά το Interface Builder κάνοντας κλικ στο HelloWorldViewController.xib, κάνοντας κλικ στο πλαίσιο κειμένου και στην παλέτα Inspector μεταβαίνουμε στη δεύτερη καρτέλα (Συνδέσεις πεδίου κειμένου). Βλέπουμε ότι υπάρχει μια ενότητα που ονομάζεται Outlets Αναφοράς, χωρίς να έχει σημειωθεί κάτι. Αυτό σημαίνει ότι προς το παρόν το Interface Builder δεν γνωρίζει καμία σχέση μεταξύ αυτού του πεδίου κειμένου και ενός IBOutlet (Interface Builder Outlet) μιας τάξης ... αλλά έχουμε ένα UITextField IBOutlet στο HelloWorldViewController, γι 'αυτό θα το συνδέσουμε.

Για να το κάνουμε αυτό, όπως βλέπουμε στο σχήμα, κάνοντας κλικ στον μικρό κύκλο δίπλα στην «Νέα έξοδος αναφοράς», μεταφέρουμε στον Κάτοχο του αρχείου του παραθύρου που ονομάζεται HelloWorldViewController.xib. Θα μας επιτρέψει να επιλέξουμε 2 επιλογές, προβολή (την πλήρη προβολή) και textField (η μεταβλητή μας). Προφανώς επιλέγουμε textField, και έτσι συσχετίζουμε το πλαίσιο κειμένου μας με τη μεταβλητή του τύπου UITextField. Παρεμπιπτόντως, το File'sOwner ή ο κάτοχος του αρχείου δεν είναι ούτε περισσότερο ούτε λιγότερο από την τάξη ελεγκτή μας ...

Επαναλαμβάνουμε τη λειτουργία με την ετικέτα, συνδέοντάς την με την ετικέτα μεταβλητού ελεγκτή. Και με το κουμπί, είναι κάτι διαφορετικό. Σε αυτήν την περίπτωση πρόκειται να το συσχετίσουμε με τη λειτουργία updateTexto, αλλά για ένα συγκεκριμένο συμβάν. Κάντε το με το συμβάν "Touch Up Inside" και επιλέξτε τη μέθοδο ενημέρωσηςTexto:

Και με αυτόν τον τρόπο έχουμε ήδη συσχετίσει τα στοιχεία ελέγχου που είχαμε ορίσει με το Interface Builder και τις μεταβλητές που έχουμε θέσει στον ελεγκτή. Κλείνουμε το Interface Builder αποθηκεύοντας τα πάντα και πηγαίνουμε στο τελευταίο βήμα επιστρέφοντας στον XCode.

Βήμα 5. Τελευταίες εξελίξεις.

Στο XCode ανοίγουμε το HelloWorldViewController.my και βάζουμε τον ακόλουθο κώδικα έτσι ώστε η τάξη μας να μοιάζει με αυτό:

Αν κοιτάξουμε προσεκτικά, απλά θέσαμε το μπλοκ @synthesize και την εφαρμογή της μεθόδου που δηλώνεται στη διεπαφή .h, updateTexto. Κάτω από αυτόν τον κώδικα θα έχετε πολλά σχόλια κώδικα.

Η γραμμή @synthesize κάνει κάτι παρόμοιο με τη δημιουργία του τυπικού getter / setter (accessors / mutators) που είναι τυπικό στις γλώσσες OO (encapsulation). Τα χρειαζόμαστε έτσι ώστε ο ελεγκτής να φτάσει στο περιεχόμενο, για παράδειγμα, στο πλαίσιο κειμένου.

Η μέθοδος updateTexto, όπως μπορείτε να δείτε, απλώς ενημερώνει το κείμενο της ετικέτας μας με το περιεχόμενο του πεδίου κειμένου. Εμεις τελειωσαμε.

Τώρα, απλά κάνουμε Build & Go, και θα δείτε ότι όταν εισάγετε μια συμβολοσειρά κειμένου και κάνετε κλικ στο κουμπί, το περιεχόμενο της ετικέτας ενημερώνεται. Στο επόμενο άρθρο θα παρουσιάσουμε βελτιώσεις στην εφαρμογή μας.


Ακολουθήστε μας στις Ειδήσεις Google

Αφήστε το σχόλιό σας

Η διεύθυνση email σας δεν θα δημοσιευθεί. Τα υποχρεωτικά πεδία σημειώνονται με *

*

*

  1. Υπεύθυνος για τα δεδομένα: AB Internet Networks 2008 SL
  2. Σκοπός των δεδομένων: Έλεγχος SPAM, διαχείριση σχολίων.
  3. Νομιμοποίηση: Η συγκατάθεσή σας
  4. Κοινοποίηση των δεδομένων: Τα δεδομένα δεν θα κοινοποιούνται σε τρίτους, εκτός από νομική υποχρέωση.
  5. Αποθήκευση δεδομένων: Βάση δεδομένων που φιλοξενείται από τα δίκτυα Occentus (ΕΕ)
  6. Δικαιώματα: Ανά πάσα στιγμή μπορείτε να περιορίσετε, να ανακτήσετε και να διαγράψετε τις πληροφορίες σας.

  1.   pedro dijo

    Πολύ καλό σεμινάριο, πολύ σαφές και απλό.

  2.   rubdotto.com dijo

    Λοιπόν, πρέπει να είμαι πολύ πεπόνι 🙁 γιατί δεν λειτουργεί για μένα. Έχω καταγράψει την τιμή σε μια συμβολοσειρά και παίρνει το κείμενο αλλά δεν την εκχωρεί στην ετικέτα, τουλάχιστον δεν την ζωγραφίζει, γιατί προσπαθώ να δω το label.text και μου λέει εκτός πεδίου ...

  3.   leo2279 dijo

    Εξαιρετικά τα σεμινάριά σας, εξηγεί πραγματικά πολύ καλά αυτήν την εξέλιξη για το iPhone, ελπίζω να συνεχίσετε να δημοσιεύετε περισσότερα σεμινάρια.

    αφορά

  4.   Mariano dijo

    Γεια, όλα καλά, αλλά δεν λειτουργεί. Για να λειτουργήσει έπρεπε να συνδέσω την προβολή του δημιουργού διεπαφών με την προβολή στον κύβο, καθώς διδάσκετε να κάνετε με το πεδίο κειμένου και την ετικέτα. Για τα υπόλοιπα, σας ευχαριστώ πολύ.