Erstelle deine erste iOS-App in Swift – die Grundlagen der iOS-Entwicklung | Zeph Cohen | Skillshare

Playback-Geschwindigkeit


  • 0.5x
  • 1x (normal)
  • 1.25x
  • 1.5x
  • 2x

Erstelle deine erste iOS-App in Swift – die Grundlagen der iOS-Entwicklung

teacher avatar Zeph Cohen, iOS Engineer

Schau dir diesen Kurs und Tausende anderer Kurse an

Erhalte unbegrenzten Zugang zu allen Kursen
Lerne von Branchenführern, Ikonen und erfahrenen Experten
Eine Vielzahl von Themen, wie Illustration, Design, Fotografie, Animation und mehr

Schau dir diesen Kurs und Tausende anderer Kurse an

Erhalte unbegrenzten Zugang zu allen Kursen
Lerne von Branchenführern, Ikonen und erfahrenen Experten
Eine Vielzahl von Themen, wie Illustration, Design, Fotografie, Animation und mehr

Einheiten dieses Kurses

21 Einheiten (3 Std. 28 Min.)
    • 1. Kursübersicht

      0:51
    • 2. Einrichtung

      5:38
    • 3. Alle Infos über View

      7:03
    • 4. Segmente und Navigationssteuerungen

      7:24
    • 5. Die Tabellen-Ansicht kontrollieren

      6:43
    • 6. Die TODO-Liste implementieren

      13:16
    • 7. Die Detailansicht verbinden

      8:41
    • 8. 7. Subclassing von UITableViewCell

      10:23
    • 9. Die Einführung von Introducing

      12:00
    • 10. In der Task Table View Zelle ziehen

      8:41
    • 11. Den Task Creator View erstellen

      5:17
    • 12. Task Creator View Creator

      13:06
    • 13. Die IBOutlets und IBActions für die Aufgabe Creator Creator konfigurieren

      14:59
    • 14. Einführung der UIPickerView

      12:07
    • 15. Die UIDatePicker gestalten

      10:28
    • 16. Die Benutzererfahrung verbessern

      9:48
    • 17. Erstellen der TODO

      12:07
    • 18. Einführung in die Protokolle und Delegation

      10:35
    • 19. Den eigenen Delegierten erstellen

      9:06
    • 20. Den Controller zur Detailansicht gestalten

      16:27
    • 21. Die Feinschliff hinzufügen

      13:03
  • --
  • Anfänger-Niveau
  • Fortgeschrittenes Niveau
  • Fortgeschrittenes Niveau
  • Alle Niveaus

Von der Community generiert

Das Niveau wird anhand der mehrheitlichen Meinung der Teilnehmer:innen bestimmt, die diesen Kurs bewertet haben. Bis das Feedback von mindestens 5 Teilnehmer:innen eingegangen ist, wird die Empfehlung der Kursleiter:innen angezeigt.

1.097

Teilnehmer:innen

--

Projekte

Über diesen Kurs

414e5f06

Willkommen beim Grundkurs von iOS in dem wir dir einen hohen Überblick über alle Bausteine, die du für die Erstellung großartiger iOS Anwendungen brauchst.

Dieser Kurs behandelt eine Übersicht über die Themen iOS- In diesem Kurs geht von der Arbeit an der Programmierung vorgehen und dich anfangen können. Um in diesem Kurs zu folgen, ist es am besten mit jedem Video zu folgen. Du würdest dir das Programm am besten mit dem Video bedienen, um sicherzustellen, dass dein Projekt die gleichen oder ähnlichen Ergebnisse wie meine ausmacht.

Das Kursprojekt erfordert die Durchführung vieler der in den Videos behandelten Themen und die Erstellung deiner eigenen Anwendung Du kannst dich auf die Kursvideos ansehen, wenn du nicht nicht weiterkommst, um etwas ganz bestimmten Weg zu machen. Wenn du das gesamte Video während des gesamten Videos programmierst, kannst du das als Referenz für das Kursprojekt verwenden.

Bestimmte Themen in diesem Kurs sind:

  • Subclassing Subclassing
  • Verstehe verschiedene Arten von Segmenten und der application
  • Lerne über UINavigationControllers und UITableViewControllers
  • AutoLayout
  • Subclassing
  • Die Grundlagen der Protokolle und der Delegation
  • Die UIPickerView lernen
  • Benutzer-Eingabe mit UITextFields erfassen
  • Daten zwischen den view übertragen
  • Benutzeroberfläche Elemente programmieren
  • Die Grundlegende Konzepte zum Thema Benutzeroberflächen und der Benutzererfahrung lernen

Technologien in diesem Tutorial:

  • Schnapp 4
  • Xcode 9
  • macOS

 

Triff deine:n Kursleiter:in

Teacher Profile Image

Zeph Cohen

iOS Engineer

Kursleiter:in

Hello,

My name is Zeph and I am a mobile app developer here to teach you how you can make your own mobile apps! 

I have years of industry experience working in desktop and mobile software development and I want to take the skills and knowledge I've gained and share that with you. 

Be sure to check out my YouTube channel Code Pro where I upload videos cover certain programming topics / tutorials. My full length courses I will be uploading here which will go into much more depth and detail. 

Feel free to reach out to me with any questions you have as you take my courses.

Vollständiges Profil ansehen

Kursbewertungen

Erwartungen erfüllt?
    Voll und ganz!
  • 0%
  • Ja
  • 0%
  • Teils teils
  • 0%
  • Eher nicht
  • 0%
Bewertungsarchiv

Im Oktober 2018 haben wir unser Bewertungssystem aktualisiert, um das Verfahren unserer Feedback-Erhebung zu verbessern. Nachfolgend die Bewertungen, die vor diesem Update verfasst wurden.

Warum lohnt sich eine Mitgliedschaft bei Skillshare?

Nimm an prämierten Skillshare Original-Kursen teil

Jeder Kurs setzt sich aus kurzen Einheiten und praktischen Übungsprojekten zusammen

Mit deiner Mitgliedschaft unterstützt du die Kursleiter:innen bei Skillshare

Lerne von überall aus

Ob auf dem Weg zur Arbeit, zur Uni oder im Flieger - streame oder lade Kurse herunter mit der Skillshare-App und lerne, wo auch immer du möchtest.

Transkripte

1. Kursübersicht: Hallo, Mein Name ist Jeff, und willkommen zum IOS Fundamentals Course, wo wir unsere erste Anwendung erstellen , die so aussieht. In diesem Kurs wird davon ausgegangen, dass Sie grundlegende Programmiererfahrung haben und mehr über die Entwicklung von IOS-Anwendungen erfahren möchten . Dieser Kurs besteht aus 20 Video-Tutorials für jedes Video, behandelt ein bestimmtes IOS-Thema und wendet dieses Thema dann auf den Aufbau unserer Anwendung an. Jedes Video in den Siri baut auf den Videos auf, die davor gekommen sind, so dass Sie in Ihrem eigenen Projekt für jeden Schritt des Erfolgs in diesem Kurs codieren können , stellen Sie sicher, dass Sie das Thema, das in jedem Video behandelt wird, und es wäre vorteilhaft, für jedes Video in der Serie mitzuprogrammieren. Das abschließende Projekt für diesen Kurs nutzt viele der Fähigkeiten, die wir gelernt haben, und wendet sie auf eine neue App mit unterschiedlichen Anforderungen an. Vielen Dank, dass Sie sich für diesen Kurs anmelden, und ich freue mich darauf, Sie im ersten Video-Tutorial zu sehen 2. Einrichtung: Das allererste, was wir tun müssen, ist X-Code einzurichten. X Code ist Apples primäre integrierte Entwicklungsumgebung, und es ist, was wir für dieses gesamte Tutorial verwenden werden. Wenn Sie also auf einem Mac-Computer sind, wenn Sie in den APP-Store gehen und nach X-Code suchen, sollte es das erste sein, was auftaucht. Also wollen wir tun, ist Download X-Code, und sobald Ex Card heruntergeladen wird, gehen Sie vor und öffnen Sie es und wird unser erstes Projekt erstellen. Die meisten Ex-Karte wird geöffnet und eingerichtet. Gehen Sie zum Erstellen eines neuen Projekts und Sie werden mit einem Menü begrüßt, das wie folgt aussieht. Stellen Sie sicher, dass Sie sich im IOS-Bereich befinden und wir werden eine einzelne View-Anwendung auswählen. Hier werden Sie feststellen, dass es ein paar andere Vorlagentypen gibt, z. B. eine Seite, die auf einer Registerkartenbasis basiert und einige andere. Aber unsere Absichten und Zwecke wollen wir eine einzelne View-App verwenden, also gehen Sie weiter und treffen Sie weiter, und wir müssen voran gehen und geben Sie diesem Projekt den Namen, so dass wir einfach dieses Projekt ein nennen und Sie müssen eine Organisation und für ein Team auswählen Ich werde sagen, dass mein Team keine ist weil ich kein Entwicklerprofil mit diesem jetzt für den Organisationsnamen in der Organisation verwende . Geben Sie an, wo Sie einen neuen Organisationsnamen finden können, der Ihrer Meinung nach in einer Kennung angemessen ist . Sie können auch Ihre eigene Kennung dafür finden. Für die Sprache, die wir Swift verwenden werden, und für die Komponententests hier, werde ich dieses Kontrollkästchen deaktivieren. Wir werden keine Tests in diesem Verhör von ALS Siri machen, also wenn alles aufgestellt ist , gehen wir weiter und schlagen als nächstes und platzieren das Projekt überall, wo wir es wollen. Und sobald wir das getan haben, können wir weitermachen und anfangen, einen Blick darauf zu werfen, was wir in dieser Projektstruktur haben. Lassen Sie uns also einen kurzen Blick darauf werfen, wie das Projekt strukturiert ist. Wenn wir hier nach oben links gehen. Dieses blaue Symbol ist das, was als unsere Projektdatei bekannt ist, und es enthält so ziemlich alle Quellcodedateien, die Benutzeroberflächendateien. Es weiß, wo jede Datei in unserem Projekt lebt und hat einen Verweis darauf Wenn wir unsere Projektdatei auswählen , sehen wir, dass wir hier einen Abschnitt namens Ziele haben. Ziele sind im Grunde die App. Die App, die wir erstellen, ist eine App namens Project One und ein APP-Bundle enthält die gesamte Ressource und den kompilierten Code, der unsere App in der gesamten Logik darin aufbaut . Wenn Sie also das Ziel auswählen oder Ihre App grundsätzlich auswählen, können Sie sehen, dass diese Registerkarten angezeigt werden, z. B. allgemeine Funktionen, erstellte Einstellungen und Buildphasen. Es gibt viele verschiedene kleine Informationen, die wir im Laufe der Zeit ändern müssen . Im Allgemeinen finden Sie jedoch Dinge wie den Anzeigenamen der App, das Bundle, wo die Version des Teams, das Sie für Ihr Entwicklerteam verwenden, sowie viele andere Einstellungen wie die Bereitstellung, Ziel, die Geräte und so weiter und so weiter. Wir müssen also oft ein Verständnis für die Dinge haben, die wir hier ändern können wenn wir Projekteinstellungen für unsere Anwendung ändern müssen. Wenn wir auf der linken Seite wieder rüber gehen, haben wir unsere schnellen Akten. Dies sind die Quellcodedateien, die den größten Teil unserer Logik in der Anwendung schreiben würden . Als nächstes haben wir, was als Storyboard-Datei bekannt ist, und dies ist die visuelle Darstellung unserer Anwendung. Wenn wir anfangen, verschiedene Bildschirme in der APP zu erstellen, können wir verschiedene Elemente zu diesem Story-Board hinzufügen, um ein visuelles Layout zu erstellen, wo APP aussehen wird und wie es fließen wird. Außerdem haben wir einen sogenannten „Assets“ -Ordner. Dies ist, wo wir Dinge wie ein App-Symbol setzen Symbole für verschiedene Ressourcen ist in unserem Labor und verschiedene Bildschirme und Ansichten, vielleicht ein Profilbild. Wir setzen diese hier und andere Assets Schritt entlang in den Asset-Katalog. Wir wollen sicherstellen, dass unser Projekt kompiliert und erstellt und läuft auf unserem Simulator erfolgreich, um die Anwendung tatsächlich auszuführen. Wenn wir hier nach oben gehen, sehen wir, dass wir diese Play-Schaltfläche haben, die uns verschiedene Optionen gibt. Wenn wir darauf klicken, haben wir die Möglichkeit zu laufen, um auf Analysator-Anwendung Profil zu testen. Also, bevor wir es ausführen, wollen wir sicherstellen, dass wir das Anwendungsziel auswählen, das Projekt eins für unser Beispiel ist, als das ausgewählte Projekt hier in. Das ausgewählte Ziel. Nun, sobald Sie das haben, sollten Sie eine Option von Simulatoren zur Auswahl haben. Ich werde einen iPhone SC Simulator wählen, nur um dies auszuführen, um sicherzustellen, dass es funktioniert. Wenn aus irgendeinem Grund kein Simulator angezeigt wird, wenn ein Installationsproblem vorliegt, haben Sie die Option. Hier laden Sie Simulatoren herunter, und wenn Sie darauf klicken, werden Sie in die Liste der simulierten Laufzeiten aufgenommen, die Sie herunterladen können. Und sobald das abgeschlossen ist, haben Sie eine Liste von Simulatoren, die in diesem Mann auftauchen. Du fallst runter. Sobald Sie also Ihren Simulator ausgewählt haben, gehen Sie weiter und drücken Sie den Play-Button und das wird das Projekt kompilieren, unser Anwendungspaket aufbauen und es auf dem Simulator installieren, und bis jetzt sieht es so aus, als wäre alles gut. Sie können das sehen, sagt das Starten von Projekt eins, und wir geben nur in dieser Minute die Simulator-Minute, um zu booten und zu überprüfen, dass alles gut aussieht. Mein Simulator läuft und ich sehe einen weißen Hintergrund, was ein gutes Zeichen ist, was ein gutes Zeichen ist, und wenn wir zurück zu unserem Hauptstory Board gehen und es so auswählen, dass es hier auftaucht und wir gehen zurück und werfen einen Blick auf unsere -Simulator. Was wir jetzt in unserem Simulator sehen, ist die visuelle Darstellung dieses View-Controllers aus dem Storyboard, Sie können sehen, dass es keine Ich-Interface-Elemente auf diesem View-Controller gibt, wie ein Textfeld oder jede Art von Schaltflächen, und es ist ein weißer Hintergrund. Und da dies der Startansicht-Controller ist, wird das genau hier im Simulator dargestellt. Lassen Sie uns nun einen tieferen Blick in die Sicht Controller werfen und ein wenig mehr darüber verstehen , wie sie das Brot und Butter einer IOS-Anwendung sind. 3. Alle Infos über View: nun gehen Sie voran, wählen Sie zum View-Controller innerhalb des Haupt-Story-Boards und gehen Sie hier unten in die linke untere Ecke. Und stellen Sie sicher, dass Sie dieses Dokument umrissene Menüoption erweitern. Und wenn Sie dies tun, haben Sie hier Ihre View-Controller-Hierarchie, und Sie können das mit seinem View-Controller sehen. Es enthält eine Ansicht, und ein View-Controller ist das Brot und Butter die Bausteine einer IOS-Anwendung. Sie können sich einen View-Controller als Bildschirm in einer App vorstellen, der eine beliebige Anzahl Ihrer Elemente wie Textfelder und andere Ansichten und Tabellenansichten enthalten kann . So weiter und so weiter, wenn wir für zusätzliche Bildschirme in unserer Anwendung wollten. den meisten Fällen Inden meisten Fällenwerden wir eine Form eines View-Controllers erstellen, und wir werden von View-Controller zu View-Controller navigieren, Daten von einem zum anderen übergeben, um durch unsere App durch das, was bekannt ist als Segways. Und im Wesentlichen kann der View-Controller einfach ist, dass es ein Controller ist, der Ansichten steuert, und das ist seine Aufgabe im primären Zweck. Wenn wir also Elemente zu einem View-Controller hinzufügen möchten, können wir es aus einer Storyboard-Stempelperspektive tun, wenn wir hier zur Objektbibliothek gehen und die ausgewählte Auswahl von Optionen hier durchschauen , wir können Elemente in die Ansicht ziehen. Nehmen wir an, zum Beispiel wollte ich ein Textfeld hinzufügen, das für Textfeld beginnt, und ich bekomme hier eine Option. Und Aiken, ziehen Sie es auf den View-Controller. Und wenn Sie zurück gehen und sich die Hierarchie hier ansehen, können Sie sehen, dass diese Ansicht eine Unteransicht für eine Unterkomponente enthält. Und das ist das Textfeld. Und im Allgemeinen werden wir auf diese Weise Elemente in diesem Kurs am meisten für Sie entwerfen. Es ist großartig für Anfänger. Es ist visuell leicht zu sehen, und es stellt den Fluss unserer Anwendung dar, und wir können ziemlich schnell vorwärts gehen, indem wir diesen Ansatz machen. Nun, da wir ein grundlegendes Verständnis haben, haben Sie Controller in einer Storyboard-Datei arbeiten, müssen wir verstehen, wie sie sich auf die Quellcodedateien beziehen. Wenn Sie also hier rüber gehen und zum Assistenten-Editor-Symbol gehen und darauf klicken, wird es das Seitenfeld öffnen und wir können unsere View-Controller Punkt Swift Datei nebeneinander mit unserem View-Controller aus dem Storyboard haben . Und wie wir hier schauen, wenn wir unseren View-Controller auswählen und wir hier zurück auf die rechte Seite gehen und wir zur Klasse gehen , Inspector, Inspector, können Sie sehen, dass es eine Klasse namens View-Controller gibt. Standardmäßig der View-Controller, der im Projekt erstellt wird, automatisch dieser Quellcodedatei direkt hier zugewiesen . Und wenn wir zusätzliche View-Controller erstellen, müssen wir die Quellcodedatei zuweisen, um dem entsprechenden View-Controller in der Storyboard-Datei zuzuordnen . Also lassen Sie uns das für ein Beispiel tun. Nur damit Sie nicht verstehen, wie Sie das tatsächlich erreichen können. Also geh zurück hier runter zur Objektbibliothek. Was wir tun wollen, ist nach einem View-Controller zu suchen und wir können dieses Element hier auf unser Storyboard ziehen . Und so haben wir jetzt eine Sekunde, die du kontrollierst. Es hat keine Unterklasse oder irgendeine Art von Assoziation mit der Quellcodedatei. Das werden wir jetzt erschaffen. Wählen Sie also einen neuen View-Controller aus, den Sie gerade erstellt haben, und gehen Sie zu Ihrem Quellcode. Und unter Ihrem Ordner, klicken Sie mit der rechten Maustaste und gehen Sie zu einer neuen Datei, und wir werden hier eine neue schnelle Datei verwenden, und wir werden diesen Detailansicht-Controller aufrufen, und wir werden diese Datei erstellen. nun sicher, dass Sie Ihre Detailansicht haben. Die Kontrolle wird hier ausgewählt, und ich werde es in meiner rechten Seite zeigen. Wenn ich auf dieses Menü klicke und zu den letzten Dateien gehe, kann ich nach detailliertem View-Controller suchen. Wenn die Benutzeroberfläche angezeigt wird, klicken Sie nicht auf diese. Stellen Sie sicher, dass Sie diejenige beenden, die keine Schnittstelle sagt. Das wird also die Codedatei hier auf der linken Seite aufrufen. Lassen Sie uns unser Storyboard offen halten und machen Sie die Verbindung zwischen dieser Codedatei und diesem Element Sie hier. Also müssen wir tatsächlich unsere Klasse erstellen. Und wir tun das, indem wir in das notwendige Framework importieren, das View-Controller enthält. Und was wir tun werden, ist wichtig. Ihr Kinder, ich erkläre in einer Minute, warum wir das tun müssen. Also müssen wir unseren Klassenklassen-Detailansicht-Controller erstellen, der von Ihnen abgeleitet wird. Ich betrachte Controller und lass uns voran gehen und das strukturieren. Und lassen Sie uns hier eine Methode namens View hinzufügen, hat geladen und wir werden nur einen super Job machen. Du hast geladen und lasst uns genau das aufschlüsseln, was los ist, mit dem, was wir gerade gemacht haben. Also ist der U I View-Controller von den Äpfeln. Du setze ich Framework ein. Es enthält die Basisstufe, die Sie ich steuert, die Apple für uns in unserer Anwendungsentwicklung für Iowa's zur Verfügung stellt . Und im Grunde sagen wir, dass es detaillierte View-Controller gibt, ist es Unterklasse ing oder nicht Unterklasse ing, sondern kommt von Ihnen. Ich sehe den Controller an. Es enthält also alle Eigenschaften und Elemente, die von Ihnen stammen. Ich setze mich ein. Nun, wie machen wir diese Assoziation von hier nach hier? Nun, das ist ganz einfach. Wenn Sie den View-Controller im Storyboard auswählen und wir gehen zurück zum Klasseninspektor hier jetzt haben wir die Möglichkeit, unsere Unterklasse zu erstellen. Und so, wenn Sie sehen, genau hier ist für jede Art von Ihnen suchen, haben Sie Controller und wir passieren, um einen detaillierten View-Controller genannt zu machen, so dass wir die Assoziation hier erstellen können indem Sie im Detail eingeben, View-Controller und Sie könnten siehe führt automatisch das für uns zu füllen. Und noch eine Sache, die wir hier machen wollen, ist, ein Storyboard zu erstellen. Und im Allgemeinen, was alle den Namen der Klasse als den Namen des Storyboards I d verwendet und das bedeutet im Grunde, dass, wenn wir versuchen, den View-Controller programmgesteuert zu laden, wir vielleicht immer nach seinem Namen suchen können, Und im Allgemeinen, was alle den Namen der Klasse als den Namen des Storyboards I d verwendet und das bedeutet im Grunde, dass, wenn wir versuchen, den View-Controller programmgesteuert zu laden , wir vielleicht immer nach seinem Namen suchen können, die detaillierte Ansicht Controller toe ist, laden Sie es in den Code. Sobald Sie das eingerichtet haben, haben Sie jetzt die Verknüpfung zwischen der Quellcodedatei in den USA imU-Element hier erstellt im . Lassen Sie uns also einen Blick auf die betrachtete Last werfen. Wenn wir Befehl klicken Sie auf Sie, haben Sie Controller und gehen Sie, um die Definition zu springen. Hier können wir alle verfügbaren Methoden sehen, die Apple für uns zur Verfügung stellt , die wir von Ihnen verwenden können. Sie haben Ihren Kontrolleur. Sie können hier sehen. Das ist, woher die Ansicht geladen hat, kommt. Und es sagt genau hier in den Kommentaren, die aufgerufen wurden, nachdem die Ansicht für die Ansicht geladen wurde, wird das Steuerelement erstellt und Code. Das ist hinter vielen von Ihnen her. Und im Allgemeinen ist dies, wo wir die meisten unserer Einrichtungscode für die meisten Umstände tun wenn diese Methode aufgerufen wird. Daher ist es sehr wichtig, dass wir dies in unserer Unterklasse überschreiben, um Controller anzuzeigen, und wir werden definitiv in mehr dieser Lebenszyklusmethoden eingehen, wenn wir vorwärts gehen. 4. Segmente und Navigationssteuerungen: Lassen Sie uns nun über Segways, Segways sprechen oder wie wir von einem View-Controller zu einem anderen View-Controller übergehen. Und wir können es auf ein paar verschiedene Arten tun. Und was wir anfangen werden, ist, was man einen beweglichen Segway nennt. Und um dies zu tun, wollen wir ein paar Dinge tun. Das erste, was wir auf unserem Detail Ihres Controllers tun möchten, ist, die Farbe der Ansicht zu ändern , so dass wir visuell unterscheiden können, welcher View-Controller war auf. Also, wenn Sie Ihren detaillierten neuen Controller hier ausgewählt haben, wenn Sie gehen und Sie die Ansicht hier und selektiv finden und dann gehen Sie hier rüber, wir wollen die Registerkarte für die Attribute auswählen. Inspektor, wir gehen zu den Ansichten, Hintergrundfarbe, Hintergrundfarbe, und ich wollte die Meinung zu einer anderen Farbe hier ändern, damit wir visuell sehen können, dass dies der Detailbildschirm ist. Nun, um den Segway auszulösen, benötigen wir eine Art von Schaltflächenklick, wo Sie Element, mit dem ein Benutzer interagieren würde, um von einem zum anderen zu gelangen . Und wir können hier zur Objektbibliothek gehen und nach einer Schaltfläche suchen, und wir können diese Schaltfläche auf unseren ersten View-Controller ziehen , und ich werde das Textfeld verlassen, das ich von früher hatte. Und wir alle tun, ist den Knopf irgendwie in die Mitte zu setzen. Ich werde es vorwärts ziehen, und ich zoomen ein wenig auf der Leinwand hier und erhöhen Sie einfach die innerhalb der Höhe der Schaltfläche und zentrieren Sie sie. Und wenn Sie hier mit Ihrer Schaltfläche ausgewählt gehen, haben wir anstelle der Standard-Textschaltfläche verwendet. Nun, nur dio sagen, wo und was wir als nächstes tun müssen, ist tatsächlich die Verbindung zu schaffen, um den Segway zu machen . Jetzt ist der einfachste Weg, dies zu tun, ein Interface-Builder, und indem wir das tun, können wir unsere Selektor-Taste halten. Wir können die Strg-Taste auf der Bereinigung auf der Tastatur gedrückt halten, klicken und ziehen Sie dann über die Detailansicht, Controller und Freigabe, und Sie werden sehen, dass wir eine Aktion Segway, die kommt. Wir haben eine Show, ein Show-Detail, gegenwärtigen Modus früh, und dann haben wir diese nicht adaptive veraltete ID Segways. Also, was wir tun werden, ist eine Show und Sie werden sofort sehen, dass das die Verbindung von hier nach hier schafft . Lassen Sie uns das also im Simulator ausführen und sehen Sie genau, wie das aussehen wird. Meine Simulatoren laufen hier. Und mach dir keine Sorgen, wenn deine Knöpfe etwas außerhalb der Mitte liegen, solange du sie noch sehen kannst, das ist in Ordnung. Wir werden später in der Serie darüber sprechen, wie man in positioniert , Dinge mit automatischem Layout einsperrt. Wenn jetzt, gehen Sie voran und drücken Sie die Segway-Taste und Sie können sehen, dass wir zu unserem detaillierten View-Controllergegangen , dass wir zu unserem detaillierten View-Controller , haben wir einen echten Bildschirm hier, aber leider haben wir keine Möglichkeit, zurück zu unserer Startansicht -Controller. Wir stecken hier fest, weil wir keine Möglichkeit haben, den Fluss zu entlassen. Siehst du, wir haben keinen Rückknopf oder einen Weg, um runter zu gehen. Und diese Art von Segway ist als motile Segway bekannt. Es wird verwendet, um Informationen zu präsentieren, die den Vollbildmodus einnehmen würden, und vermutlich würde es verwendet werden, um eine Art von Benutzereingaben wie, sagen wir, einen Eintrag Formular ein Registrierungsformular, ein Protokoll zu erfassen wir, sagen wir, einen Eintrag Formular ein Registrierungsformular, informieren, auf die noch jemand hatte, um den Fluss zu entlassen. Nun, offensichtlich haben wir hier keinen Knopf hinzugefügt, also stecken wir für den Moment fest. Jetzt können wir dies leicht mit einem so genannten Navigationscontroller korrigieren. Nun gehst du zurück zu deinem Story-Board und wähle den eigentlichen Segway aus und lösche ihn. Und was stattdessen tun wird, ist, dass wir diese Idee eines Navigations-Controllers vorstellen. Und der einfachste Weg, diesen View-Controller mit einem Navigationscontroller einzurichten, ist, wählen Sie Ihren neuen Controller, gehen Sie zum Editor-Menü hier, gehen Sie zu Einbetten und wählen Sie dann Navigationscontroller aus. Und sofort. Was Sie sehen werden, ist, dass wir diesen Navigationscontroller haben, der auf unseren View-Controller ganz oben zeigt . Hier haben wir eine Navigationsleiste, und das wird in einem Moment wichtig sein. Also lassen Sie uns die gleichen Schritte wiederholen. Wir werden unsere Schaltfläche hier mit dem detaillierten View-Controller verbinden. Wenn wir also die Strg-Taste gedrückt halten, klicken Sie und ziehen Sie über. Wir haben unser Handeln. Segway kommen und wir werden zeigen, und Sie werden jetzt sehen, dass wir eine Zurück-Taste auf unserem detaillierten View-Controller haben, die wir vorher nicht hatten. Gehen wir also voran und führen Sie dies im Simulator aus, und dann werden wir eine Diskussion über Navigationscontroller durchlaufen und was genau hier los ist ? Also, wenn ich jetzt auf meine Segway-Schaltfläche hier klicke, werden Sie sehen, dass wir in den Detailansicht-Controller gehen. Aber wir haben einen Weg zurück zu kommen. Wir haben einen Zurück-Knopf, wir drücken den Zurück-Knopf, wir gehen zurück. Wenn wir Segway wieder hatten, gehen wir vorwärts, und Sie können auch sehen, dass die Animation anders ist. Es ist fast so, als gleitet es hinein, und eine andere Sache, die Sie hier tun können, ist, wenn Sie irgendwie an den Rändern ein wenig ziehen, haben Sie die Möglichkeit, über zu ziehen, um auch zurück zu gehen. Und das ist nur eine Funktion von Navigationscontrollern, die sie standardmäßig unterstützt haben, es sei denn, Sie deaktivieren es. Und wenn Sie sich erinnern, der motile Segway oder das erste Segment, das wir gemacht haben, kam von unten und unser Navigationscontroller, Segway gleitet zur Seite. Lassen Sie uns nun ein wenig in Navigations-Controller eingraben. Der Navigationscontroller ist ein Typ von Ihnen, den ich Controller ansehe. In der Tat leitet sich der Navigationscontroller von Ihnen ab, haben Sie Controller, so dass er alle Eigenschaften erbt, die Sie Controller haben, aber er fügt auf einer Navigationsleiste und einem Array von Ihnen Controller hinzu, die die -Navigations-Stapel verwaltet. Sie können sich Seguin zwischen View-Controllern als Schieben und Aufspringen von View-Controllern auf und aus dem Stapel vorstellen . Der interne Stapel Ihrer Controller, den der Navigationscontroller enthält. also standardmäßig Wenn Siealso standardmäßigeinen View-Controller über das Storyboard hinzufügen und eine Verbindung über einen Segway herstellen. Was auch immer dieser Detailansicht-Controller ist, oder andere View-Controller, die von diesem Navigationscontroller abgeleitet werden, erben wir alle die Navigationsleiste, die eine Zurück-Taste oder eine Möglichkeit bietet, zurück zu gehen, es sei denn, wir deaktivieren sie für ändern Sie es, um etwas anderes zu tun. Nun, dann könnten Sie sich fragen, welche Art von Sake-Warten, verwende ich tun ist ein Modell oder verwende ich einen Navigationscontroller? Und das hängt wirklich vom Fluss Ihrer Controller in Ihrem Projekt ab und von dem, was Sie versuchen zu tun. Also, wenn Sie den eigenständigen View-Controller haben, den Sie von überall präsentieren können, und vielleicht wird es Benutzerinformationen in einem Formular oder in einem Tutorial oder einem Splash-Logo oder etwas sammeln , das präsentiert werden könnte, dann abgewiesen. Ein Modell Segway würde jetzt in einer Reihe von Bildschirmen wie diesem am sinnvollsten machen, wo Sie , eine Eltern-Kind-Beziehung oder eine Master-Detailansicht-Beziehung haben, als eine besonders, wenn sie Navigationsleiste benötigen. Der Navigations-Controller ist durchaus sinnvoll, da Sie mit einer Ansicht beginnen und eine Reihe von Ansichten anzeigen können , die alle miteinander verknüpft sind Anschließend können Sie den Stapel einfach zum übergeordneten Ansichtscontroller nach oben navigieren. 5. Die Tabellen-Ansicht kontrollieren: bisher haben wir Sie berührt, haben Sie Controller und Navigationscontroller, und wir haben ein wenig Verständnis dafür, wie Sie sich in einer Anwendung bewegen können. Aber um eine to do List App zu erstellen, brauchen wir im Grunde eine Liste. Was wir also wirklich in Bezug auf eine Liste für Iowa brauchen, ist eine Tabellenansicht, und speziell werden wir eine spezialisierte Form verwenden, die als Tabelle Ihres Controllers bekannt . Nun, eine Tabelle Ihres Controllers ist nichts anderes als ein spezialisierter. Sie haben einen Controller, der eine Tabellenansicht in Implementierungen enthält, einige der Methoden und Funktionen, die für eine Tabelle von Ihnen benötigt wird, um ihre Daten anzuzeigen und die Zellen oder die Zeilen der Daten anzupassen. Also, wenn wir hier zu unserer Objektbibliothek gehen, wenn wir nach Tabellenansicht-Controller suchen, werden Sie sehen, dass wir eine haben, die in der Liste erscheint. Und wenn wir voran gehen und ziehen, dass die Leinwand besitzt, können wir sofort sehen, dass wir eine Tabellenansicht, eine Zelle oder eine Tabelle haben , die Sie verkaufen, und das wird uns standardmäßig gegeben, nur aus einer Tabelle Ihres Controllers. Und wenn wir unseren Tabellenansicht-Controller hier auswählen und in die Dokumenthierarchie gehen, wenn wir hier schauen und wir sehen, dass wir eine Tabelle von Ihnen haben, die eigentliche Zelle und dann die Inhaltsansicht dieser Zelle und das ist, was wir beginnen wenn wir hier schauen und wir sehen, dass wir eine Tabelle von Ihnen haben, die eigentliche Zelle und dann die Inhaltsansicht dieser Zelle und das ist, was wir beginnen werden Unsere To-Do-Liste ist, dass wir mit der Strukturierung und Einrichtung unseres Tabellen-View-Controllers beginnen, so dass er in der Lage sein kann, unsere To-Do-Listenelemente zu laden und neue Listenelemente hinzuzufügen und Auswahlen zu treffen, um in die Detailansicht für Elemente, die wir auswählen aus der Liste, genau wie wir es mit unserem Detailansicht-Controller getan haben. Wir wollen hier eine schnelle Quellcodedatei mit unserem entsprechenden Tabellenansicht-Controller verbinden. Also lasst uns weitermachen und das tun. Gehen Sie nun zu der Projektdatei hier und in den Quellcode-Ordner und klicken Sie mit der rechten Maustaste auf den Ordner und machen Sie eine neue Datei und wählen Sie eine schnelle Datei aus. Und ich werde meinen nennen, um Listen-Tabellenansicht-Controller zu tun, und ich werde das erstellen und sofort müssen wir voran gehen und unser übliches Wichtiges von Ihnen tun , wie es, der die Klasse und alle Methoden und Funktionen für Tabellen-View-Controller sowie Sie haben Sie Controller zu tun, und wir werden Klasse tun, um Listen-Tabellenansicht-Controller zu tun . Und es wird von Ihnen ableiten, ich Tabelle View-Controller. Und lassen Sie uns die View Look Methode überschreiben, die unser Einstiegspunkt sein wird, sobald dieser View-Controller zum ersten Mal geladen wird. Und sobald wir das hier eingerichtet haben, vergewissern Sie sich, dass Sie in der Assistenzredaktion sind. Wenn Ihr Assistenten-Editor geschlossen ist, können Sie ihn öffnen, indem Sie einfach auf die Schaltfläche klicken, um ihn zu öffnen. Und lass uns weitermachen und unser Storyboard auf einer Seite öffnen und ich werde meins auf der rechten Seite hier setzen und schauen wir uns einfach an, stellen wir sicher, dass wir unsere Tabellenansicht-Controller ausgewählt haben und wir gehen hier zum Klasseninspektor und wo es sagt, Sie wollen Tabellenansicht-Controller. Wir werden das in den To-Do-Listen-Tabellenansicht-Controller ändern. Wir werden diesen Namen auch kopieren. Verwenden Sie es für das Storyboard i d. In der Restaurierung I d. So können wir es mit dem gleichen Namen finden. Und jetzt lassen Sie uns tatsächlich einen Blick auf das werfen, was Sie ich Tabelle View-Controller hat, so dass Sie nur die Befehle starten können , die auf Sie klicken. Ich nehme den View-Controller , der uns in die Dokumentation für diese Klasse führt. Wenn wir uns Ihren Tabellenansicht-Controller ansehen, können wir ein paar Dinge sehen. Wenn wir uns die Vererbungshierarchie und die Protokolle ansehen, denen sie entspricht, leitet sie sich von Ihnen ab, haben Sie die Kontrolle? Also sofort, U. S. A. Mit dem Controller enthält alle Funktionen oder erbt die Funktionalität, die der View-Controller verfügbar macht. Darüber hinaus hat es eine eigene Tabellenansicht, die es zum Tabellenansicht-Controller macht und den Tabellenansichtsdelegaten in Datenquellenpartikeln implementiert . Und wir werden im Augenblick auf technische Details eingehen. Aber was wichtig zu wissen ist, ist, dass dies nur ein weiterer Spezialist ist ist. Sie haben Ihren Controller, der eine Tabellenansicht enthält und uns verschiedene Operationen für Elemente in dieser Liste in dieser Tabelle von Ihnen ermöglicht . Also jetzt gehen wir tatsächlich zurück und fangen an, einige Dinge in unserem Storyboard zu mischen. Was wir Dio wollen, ist unser View-Controller ein durch die Segway-Taste zu ersetzen und es vollständig zu entfernen . Unser zu tun Listen-Tabellenansicht-Controller wird stattdessen seinen Platz einnehmen. Also, was wir Dio können, ist wählen Sie unsere Segways aus dem View-Controller bis zum Detail und wir gehen weiter und drücken Sie die Löschtaste, um das zur gleichen Zeit zu entfernen, wir werden diesen View-Controller und seinen Navigationscontroller vollständig löschen, so dass wir kann Art von beiden auswählen und von hier gelöscht. Manchmal ist es einfacher, wenn du aus der Hierarchie ausgewählt hast , ,die hier drüben gesehen wird. Und ich werde das Gleiche für den Navigations-Controller tun. Nun, hier drüben im Quellcode des Projekts. Ich werde auch Sie Controller entfernen, so schnell. werden wir nicht mehr benutzen. Und wir werden das durch unseren To-Do-Listen-Tabellenansicht-Controller ersetzen, damit wir das vorerst loswerden . Und wir werden unseren Listen-Tabellenansicht-Controller zurück bringen, und wir werden es in einen Navigationscontroller setzen, wie wir es mit unserem View-Controller getan haben , so ausgewählt wir gehen zum Editor und dann werden wir ein eingebettetes -Navigations-Controller. Und jetzt unser Tabellenansicht-Controller gerade eine Navigationsleiste geerbt und es hat eine Tabelle von Ihnen. Es hat also eine Menge der Dinge, die wir brauchen, um eine to do Liste aufzubauen. Und eine andere Sache, an die wir uns erinnern müssen, ist, wenn wir das jetzt ausführen, müssen wir sicherstellen, dass wir diesen Startansicht-Controller finden müssen. in diesem Fall das erste Element ist, Da der Navigationscontrollerin diesem Fall das erste Element ist,das geladen werden soll, stellen Sie sicher, dass es sich um den Startansicht-Controller handelt. Und wir können das tun, indem wir es auswählen hier zum Attributinspektor gehen. Und es ein kleines Kontrollkästchen ist anfänglicher View-Controller. Stellen Sie sicher, dass Sie das aktiviert haben und Sie werden es wissen, weil Sie diesen kleinen grauen Pfeil hier haben , der anzeigt, dass dies der Startansicht-Controller in dieser Storyboard-Datei ist. Und so lassen Sie uns das jetzt ausführen, und wir werden nichts sehen, aber stellen wir sicher, dass alles in unserem Simulator funktioniert. Also schaue ich mir an, was eine leere Liste zu sein scheint. Mein Tabellenansicht-Controller wird ausgeführt. Es ist der Startansicht-Controller, aber es ist nichts drin. Ich kann ein wenig herumziehen, und wenn Sie sehen können, dass meine Tabellenansicht springt, während ich mich bewegt, um , aber abgesehen davon ist nichts anderes als eine leere Liste mit der Navigationsleiste oben bis wir beginnen tatsächlich den Code implementieren, um unsere Datenquelle anzuschließen und Elemente in der Liste anzuzeigen, und das ist, was wir jetzt anfangen werden zu tun. 6. Die TODO-Liste implementieren: jetzt, um eine Liste zu erstellen, müssen wir Elemente für Aufgaben tun. Wir werden also ein Datenmodell erstellen, das eine Aufgabe darstellt. Und wenn wir hier zu unserer Projekt-Dateihierarchie gehen und wir werden eine neue schnelle Datei erstellen , um diese Aufgabe darzustellen, also klicken Sie mit der rechten Maustaste und machen Sie neue endgültige ziemlich schnelle Datei. Und lassen Sie uns einfach diesen Task-Typ nennen und wir werden eine andere Datei erstellen. Gehen Sie also zurück zum Ordner, klicken Sie mit der rechten Maustaste auf Neue Datei, und wir werden tatsächlich eine Aufgabe erstellen, also rufen wir diese eine Aufgabe auf. Nun wird der Aufgabentyp die Kategorie definieren, in die unsere Aufgabe fallen wird. Und das wird nur jeder Newme vom Typ Task-Typ sein, und wir werden verschiedene Kategorien erstellen. das dar. Vielleicht haben wir einen Fall, um einen Fall für Hausarbeit zu studieren, einen Fall für Beschichtung, und es kann ein Fall für Urlaubsplanung sein, und ich denke, das ist gut für jetzt. Also haben wir ein paar verschiedene Arten von Aufgaben, die wir für das definieren, was wir daran interessiert sind, es zu finden, und jetzt gehen wir zurück zu der Aufgabe, die schnell und erstellen eine neue Klasse, um diese so Klassenaufgabe darzustellen, und diese Klasse wird einige Eigenschaften enthalten. Also werden wir einen Let-Task-Titel haben. Wir nennen es einfach vom Typ String betitelt. Lassen Fälligkeitsdatum, die Art Datum und lassen Sie Art der Aufgabe nehmen. Und eine Sache, die wir hier tun werden, ist, dass wir diese privat machen, so dass sie nur in dieser Klasse enthalten sind . Und dann brauchen wir eine anfängliche Isar, um Werte für jedes dieser privaten Immobilien zu injizieren . Sie haben also eine anfängliche Isar und dieser anfängliche Izer wird eine Titeltypstärke enthalten , ein Fälligkeitsdatum in einem Typ, das Aufgabenband und was wir im Körper dieses anfänglichen Izer tun werden, ist ein Zeichen jeder von Diese injizierten Werte zu unseren privaten Eigenschaften in der Klasse, so selbstbetitelt gleich Titel Selbstfälligkeitsdatum gleich Fälligkeitsdatum und Selbst. Dieser Typ entspricht dem Typ und stellen Sie sicher, dass keine Kompilierungsprobleme auftreten. Gehen Sie voran und tun Befehl sein oder Sie können hier auf das Produkt gehen und bauen, und Sie sehen Befehl zu sein ist der Hotkey, um das darzustellen. wir einfach sicher, dass unser Code erfolgreich kompiliert. Es sieht so aus, als würde es. Jetzt, mit unserem Datenmodell eingerichtet, müssen wir fortfahren und Instanzen von Aufgaben erstellen und sie der Liste hier hinzufügen, damit wir sie visuell als Rose in unserer Tabellenansicht sehen können. Also, jetzt müssen wir tatsächlich zurück zu unserer Liste Tabelle Ihres Controllers zu tun. Und wenn wir das tun, müssen wir hier tatsächlich anfangen, ein bisschen Code zu schreiben. Also sofort haben wir unseren Tisch im Controller. Das Unterklassen, den Sie ich Tabellenansicht-Controller ableitet. Und das erste, was wir tun müssen, ist eine Datenquelle zu erstellen, und die Datenquelle wird die gesamte Rose für eine Tabellenansicht enthalten und wird das wie diese Private definieren , Unsere Datenquelle vom Typ A Sammlung von Aufgaben entspricht einer leeren Liste zu beginnen. Und was wir hier tun werden, ist eine private Funktion zu erstellen, Datenquelle zu konstruieren, und wir werden das direkt nach dem Laden unserer Ansicht aufrufen. Also rufen wir hier einfach Konstruct Datenquelle auf. Nun, was diese Methode tun wird, ist ein paar Aufgaben zu erstellen, um sie an unser Datenquellen-Array anzuhängen . Also, was wir hier tun werden, ist Datenquelle, die abhängen. Und wir werden direkt in das, eine neue Aufgabe. Also werden wir Aufgabe tun und wir werden Titel für die 1. 1 wird Programmierung ein Fälligkeitsdatum zu tun. Und wir werden einfach das heutige Datum für jetzt verwenden. Das werden wir später aufräumen. Und für den Task-Typ für diesen wird nur Punktcodierung sein, weil das der Typ ist, dieser Aufgabe entspricht. Und ich kopiere das und füge das Ah alle zwei weitere Male ein, und wir werden die Aufgabe da drinnen ändern. Also für die nächste wird nur tun, Wäsche und wir werden den Typ zwei Punkt Haus Arbeit ändern . Und für die letzte, Uh, naja, naja, dio-Planungsreise dorthin, wo wir hinwollen. Ähm, Spanien? Wie wäre es mit Spin spielen Reise nach Spanien und für die Art gehört Urlaubsplanung zu tun. Also haben wir weitergemacht und unsere Datenquelle aufgebaut und jetzt müssen wir zwei der Methoden hier implementieren, mit denen wir die Datenquelle zur Tabellenansicht hinzufügen und dann für jede Zeile unsere Datenquellenelemente an jede Tabellenansichtszelle binden können. Also, wenn wir hier runter zum Ende unserer Klasse gehen, fangen wir an, die Anzahl der Zeilen im Abschnitt zu erfassen und du siehst, dass das für uns automatisch abgeschlossen wird. Und lassen Sie uns einen Blick auf, was in dieser ah Funktion los ist Signature wurden eine Tabellenansicht zur Verfügung gestellt und wurden einen Abschnitt zur Verfügung gestellt. Und was wir zurückgeben müssen, ist, wie viele Rosen in diesen Abschnitt der Tabellenansicht gehören und was einfach wir bieten werden, ist die Rückgabe der Datenquellenbestand, was Hass bedeutet. Es gibt drei Artikel in unserer Liste. Unsere Tabellenansicht wird drei Zeilen enthalten. Das ist genau das, was diese Methode hier steht. Und das ist etwas, das die Tabelle von Ihnen haben muss, um zu wissen, wie viele Daten sie enthält. Das ist also einfach. Wir können einfach die Zählung zurückgeben, und das ist alles, was wir für eine sehr einfache Tabelle von Ihnen tun müssen. Die nächste Methode, die wir implementieren müssen, ist Verkaufen für Zeile am Indexpfad, und was diese Methode tut, ist, dass sie eine Tabelle von Ihnen verkaufen für jede Zeile von Daten, die in unserem Datenquellen-Array enthalten ist, zurückgibt . Also ist die eigentliche Methode hier, wie ich beginne zu tippen, wie ich beginne zu tippen,selbst für den Zeilenindexpfad und gibt zurück. Sie, die ich Tisch von Ihnen verkaufen. Wenn du also eintreten könntest, werden sie über die Funktion für uns stopfen und dann können wir anfangen, daran zu arbeiten. Also, wenn wir uns die Methodensignatur ansehen, haben wir eine Tabelle von Ihnen. Wir haben einen Indexpfad und wir müssen eine Tabellen-View-Zelle zurückgeben. Und was hier am Ende tun wird, ist Let's table view eine Zelle gleich der Tabellenansicht, die uns Dot de que wiederverwendbare Zelle mit Bezeichner übergeben wird. Und ich werde erklären, was das in der zweiten also für den Indexpfad bedeutet und den Indexpfadparameter hier verwenden , der übergeben wurde. Und Sie werden hier sehen, dass, wenn wir die Tabellenansicht betrachten, so ist es ein Typ, und dieser Typ ist Sie. I table view cell, die die Basisklasse für eine Tabelle ist, die Sie verkaufen. Und was wir hier tun werden, ist, dass wir den Tisch zurückgeben, den Sie verkaufen, aber wir müssen verstehen, was genau eine U I Tabellen-View-Zelle ist in. Der einfachste Weg ist immer, indem Sie in die Apple-Dokumentation gehen. Also, wenn wir Sie wählen ich Tabelle Ansicht Zelle und wir Befehle klicken. Es war bis zur Definition gesprungen. Wir befinden uns jetzt in der U I Kit Dokumentation für die Klasse, die Sie verkaufen wollen, und wenn wir hier schauen, können wir sehen, dass es von Ihnen stammt, ich sehe, worüber wir noch nicht wirklich zu viel gesprochen haben, aber es ist die Basis Ebenenansicht für die meisten Arten von Ihnen, die ich kontrolliere. Und wenn wir hier unten schauen, können wir ein paar interessante Eigenschaften sehen. Da ist ein Bild. Sie gibt es eine Textbeschriftung. Es gibt eine detaillierte Textbeschriftung, und es gibt Inhaltsansicht, Hintergrundansicht und ein paar andere Dinge hier. Die wichtigen Bits für unsere Absichten und Zwecke sind also die Textbeschriftung, möglicherweise das Detail, die Textbeschriftung und möglicherweise die Bildansicht. Also sofort werden wir die Textbeschriftungseigenschaft verwenden, um es tatsächlich den Titel unserer Aufgabe zu binden . Also lassen Sie uns zurück und beginnen, das jetzt zu implementieren, und so müssen wir hier tun, ist, wie wir gerade eine Tabelle von Ihnen verkaufen gesehen oder Sie I Tabelle Ansicht Zelle enthält ein Titellabel oder ein Textlabel . Und wenn wir den Text unterschreiben wollen, müssen wir das bei einer bestimmten Aufgabe tun. Also, was wissen wir? Jetzt sofort? Wir haben einen Indexpfad, und zum Glück enthält ein Indexpfad eine Zeile, und jede Zeile entspricht ah Abschnitt in unserem Array. Der einfachste Weg, dies zu tun, wäre zu sagen, Datenquelle am Indexpfad Nicht Zeile und was wir binden müssen. Nun, wenn wir hier schauen, müssen wir unseren Titel binden. Das Problem ist, wir unseren Titel als privat definiert haben, damit wir außerhalb dieser Klasse nicht darauf zugreifen können. Und was wir tun können, ist einfach private für Titel zu entfernen, was es von Typ, intern und fruchtbar bedeutet, dass die Eigenschaft vom gesamten Modul verwendet werden kann, Äh, oder im Grunde das gesamte aus, um, und private bedeutet Es kann nur vom Inhalt innerhalb der Klasse verwendet werden. Wir möchten immer privat sein, weil es gute Praxis ist, dass Onley Eigenschaften anderen Klassen zugänglich macht , die verfügbar gemacht werden müssen. Wir wollen nicht alles enthüllen, weil es immer Möglichkeiten für andere Programmierer eröffnet , Fehler zu machen. Wenn sie anfangen, unseren Code zu verwenden, wenn wir ihnen Zugriff auf jede Eigenschaft oder Methode unserer Klasse geben , auf die sie möglicherweise keinen Zugriff benötigen. Deshalb sind wir auf Privat ausgefallen, bis wir etwas weniger restauriert, weniger restriktiv machen mussten restauriert, . Also, jetzt, da dies ein interner Zugriffstyp ist, wenn wir hier zurück gehen, können wir dann Datenquelle bei Indexpfad dot ro dot title tun. Bevor wir alles ausführen, schauen wir uns die Zelle hier an, die unseren Identifikator bedeutet. Wenn wir zurück zum Story-Board gehen, bringen wir das hier hoch und lassen Sie uns den Assistenz-Editor machen und unsere To-Do-Liste von Ihrem Controller auf der rechten Seite hier behalten . Und lassen Sie uns fortfahren und wählen Sie die To-Do-Liste für Ihren Controller-Tabellenansicht-Controller und suchen Sie nach der Tabellen-View-Zelle. Stellen Sie sicher, dass Sie es ausgewählt haben und gehen Sie zum Adressinspektor hier und Sie werden sehen, dass es diesen Abschnitt hier für die erneute Verwendung gibt. Identifizieren Sie die Luft hier. Ich werde den gleichen Namen verwenden, den ich im Code verwendet habe , der nur sehr generischer Name verkaufen wird und wir einen kurzen Blick auf diese Methode werfen . Und da wir den Befehl Optionen haben, klicken Sie in diese deaky wiederverwendbare Zelle mit Bezeichner. Lassen Sie uns das tun und die Dokumentation lesen und sehen Sie genau, was hier vor sich geht. Es sagt also sofort, dass die neuere es eine neue Ridicu-Methode ist, die garantiert, dass sie verkaufen, zurückgegeben wurde und richtig rezitiert. Angenommen, der Bezeichner ist jetzt registriert, gibt es auch eine andere darüber. Dort stellt es eine optionale I-Tabellenansichtszelle dar, die vom Delegaten verwendet wird, um eine bereits zugewiesene Zelle anstelle der Zuweisung einer neuen Zelle zu erwerben . Denn im Wesentlichen, indem Sie versuchen, eine im Speicher befindliche wiederzuverwenden und, wenn sie nicht verfügbar ist , in diesem Fall eine neue zu erstellen , . Aber wir verwenden diese Methode hier. Grund der, der kein optionales zurückgibt und im Grunde das Sprichwort ist, wenn wir mehr Arten von Zellen haben, werden wir diese mit verschiedenen Bezeichnern verknüpfen, damit ich vielleicht eine Zelle für vielleicht, ähm, Sie wissen, eine Feed-Tabelle View-Zelle. Ich könnte einen für einen Kommentar haben, oder, wissen Sie, wie eine Ach, eine Werbetabelle View-Zelle. Und das könnte jedem dieser verschiedenen Bezeichner geben und ich kann ihnen nicht alle gleich identifiziert geben , weil sie etwas brauchen, das eindeutig sagt. Diese eine ist eine bestimmte Art von Zelle im Vergleich zu der anderen, so dass ich de que que die richtige. Deshalb wollen wir diesen Bezeichner hier und auch im Storyboard für den Typ der Zelle für den Bezeichner hier setzen und sicherstellen, dass sie übereinstimmen. jetzt weiter und führen Sie unser Projekt aus, Gehen wirjetzt weiter und führen Sie unser Projekt aus,um zu sehen, wie alles bis zu diesem Punkt aussieht und es sieht so aus, als ob alles funktioniert. Ich kann drei haben. Ich habe drei Elemente in meiner Tabellenansicht meine, äh, drei Aufgaben, die ich hier in der Datenquelle definiert habe, und sicher genug, die alle in unserer Tabellenansicht gut erscheinen. 7. Die Detailansicht verbinden: also funktioniert unsere To-Do-Listentabelle gut. Aber wir wollen diese Daten an unsere Detailansicht weiterleiten können. Und vielleicht möchten wir mehr Informationen anzeigen oder ein anderes Layout für jede Aufgabe in unserer Liste haben . Also im Moment haben wir keine Möglichkeit, gerade jetzt von unserer Liste zu unserer Detailansicht zu gelangen. Also, was wir tun, ist, gehen Sie voran und verbinden Sie die Logik, um auf den Detailbildschirm verschoben, wenn wir eine bestimmte Zeile in unserer Liste zu tun auswählen. Und der einfachste Weg, dies zu tun, ist, zurück zum Konzept von Segways zu gehen. Oh, erstellen Sie einen Segway-Übergang bei der Auswahl aus unserer Listenansicht zur Detailansicht, es ist ziemlich unkompliziert. Was wir tun können, ist, wenn wir zurück auf einem unserer Listen-Tabellenansicht-Controller zu tun gehen, gehen wir zurück in den Dokumentumriss hier, wir wollen einen Halt der Zelle zu bekommen. also das Selbst ausgewählt haben, könnten wir etwas Ähnliches tun. Wo wir die Strg-Taste gedrückt halten, klicken und ziehen wir zum Detailansicht-Controller und für die Art von Segway werden wir eine Show verwenden. Und hier werden Sie sofort sehen, dass wir die Navigationsleiste vom Navigationscontroller erben, der SAR kapselt, um diesen View-Controller zu tun , der eine Zurück-Taste hat, um zurück zu kommen und diese Verbindung wurde hergestellt. Aber es gibt immer noch eine Sache, die wir brauchen, um zu dio. Wir müssen in der Lage sein, die Daten oder grundsätzlich unsere Aufgabe, den ausgewählten Test von hier nach hier zu senden . Und gerade jetzt, selbst wenn der Segway gesagt hat, haben wir keine Möglichkeit, das zu tun. Und das ist etwas, was wir müssen, um das in Code zu implementieren. Also müssen wir das an zwei Orten machen. Beginnen wir zuerst mit dem Detailansicht-Controller. Also werden wir in die Details Ihrer Controller Swift Datei gehen, und wir werden dio ist eine Eigenschaft erstellen. Wir nennen diese Laura-Task-Typ-Aufgabe, und es wird eine optionale sein. Und was wir tun werden, ist unterstellte Last, die richtig aufgerufen wird, wenn wir diesen do Controller betreten, werden wir nur drucken Tasker. Wir packen es aus, nur um sicher zu sein. Wenn Aufgabe gleich Aufgabe Druckaufgabe DOT-Titel ist und wir werden als nächstes tun, gehen Sie zurück zu unserem Listen-Tabellenansicht-Controller und, uh, na ja, gehen Sie voran und implementieren Sie eine neue Methode, die wir noch nicht gesehen haben, die genannt Vorbereiten für Segway. Und das ist eine Methode, die wir überschreiben werden. Wenn Sie die Methode hier auswählen, lassen Sie mich sehen, ob ich es in der Dokumentation ziehen kann. Äh, es sagt vielleicht nicht sofort etwas aus, aber lassen Sie mich sehen, ob wir hier zur Definition springen können. Sieht so aus, als ob ich es nicht sehen kann, aber das wird direkt aufgerufen, wenn der Segway bevorsteht. Und so ist dies der Zeitpunkt, an dem wir, wenn wir Daten an die nächsten Controller weitergeben wollen , die wir gehen, haben wir die Möglichkeit, dies hier zu tun. Wenn Sie sich die Parameter für diese Methode ansehen, haben Sie den eigentlichen Segway, der ein US-Storyboard Segway ist. Und dann haben Sie den Absender, oder im Grunde, was hat den Anruf gesendet? Was war das Element, das angezapft wurde, das diese ganze Kette von Operationen für uns aufgerufen hat? Es wird die Sie ein Tisch für Sie verkaufen, weil das sein wird, was der Benutzer ausgewählt hat . Damit begann der Übergang für den Segway. Und deshalb kann sein Typ beliebig sein, denn jeder mögliche Typ könnte etwas sein, das dies ausgelöst hat. Also müssen wir es werfen, besonders wenn wir wissen, dass wir erwarten, dass eine Tabelle von euch Schusszellen ausgewählt wurde , die wir auspacken und uns selbst bekommen können und dann den Indexpfad von uns bekommen und sie erhalten die Daten für diese bestimmte Straße und dann senden Sie, dass über das Ziel do Controller. Jetzt hat der Segway auch eine Eigenschaft Segway Ziel. Und du könntest hier sehen, dass ein Typ ist. Sie haben Ihren Kontrolleur. Und das ist, wohin wir gehen. In unserem Fall wäre dies ein detaillierter View-Controller, und so werden wir die Daten übergeben. Was also letztendlich hier tun wird, ist, das mit euch Dingen zu tun. Ähm, wenn die ausgewählte Zelle gleich Sender ist, wie Sie ich Tabellen-View-Zelle. Und eigentlich, nein, wir gehen. Glaubt an eine Wächteraussage, denn wenn wir das nicht kriegen, kümmern wir uns nicht darum, etwas anderes zu tun. Sie werden einfach zurückkehren. Also werden wir bewachen und wir werden uns aussuchen lassen. Selby, das Zentrum als US, das Sie verkaufen können, wenn wir es nicht bekommen können, wir haben Rettungsaktion angenommen, wir haben es bekommen, aber wir können dann den ausgewählten Indexpfad gleich Tabellenansicht lassen, und wir verwenden die Tabellenansichtseigenschaft für die -Tabelle Ihres Controller-Punkt-Indexpfads für Zelle. Und so werden wir tun, ist in der ausgewählten Zelle übergeben. Und diese Methoden im Grunde ah, Methode verfügbar in der Tabellenansicht, um einen Indexpfad zu erhalten. Es ist eine Art Convenience Methode. Es gibt ein paar andere hier, um Pfad für Zeile an einem bestimmten Punkt Indexpfad für eine Zelle zu indexieren, sofern eine bestimmte Zelle und Indexpfade für Rose in einem Tennessee in der Mitteilung hier gerichtet , dass diese Rückgabeoptionale. Also müssen wir auch überprüfen, um sicherzustellen, dass wir hier über den Indexpfad zurückkommen. Oder wir könnten einen Laufzeitabsturz haben, wenn wir etwas mit einem No-Wert auspacken erzwingen. Also machen wir auch noch einen Wächter. Lassen Sie hier überprüfen, Lassen Sie den ausgewählten Indexpfad nicht zurückkehren. Und vorausgesetzt, all das hat funktioniert, werden wir hier noch eine Überprüfung durchführen, und das wird sein, ähm, alles klar, alles klar, lassen Sie das Ziel steuern Sie einen Diesel-View-Controller gleich Segway-Punkt-Ziel Sie Controller als die Art von Detail, View-Controller und ich werde tatsächlich ein if let hier verwenden. Ähm immer noch, ich denke, es wird nicht wirklich wichtig, aber nun, wir können entweder oder sonst an dieser Stelle drehen, vorausgesetzt, alles geklappt hat, Sagen Sie es Ihnen, Controller verdunkelt Aufgabe gleich. Also, jetzt müssen wir herausfinden, OK, wir haben den ausgewählten Indexpfad und der ausgewählte Indexpfad hat eine Eigenschaft namens Roe und das gibt uns tatsächlich die Zeile in unserem Array, wo das Element existiert. Wenn Sie sich hier erinnern, haben wir genau das getan, um unseren Titel an eine Zelle zu binden. Wir haben genau das Gleiche gemacht. Wir verwenden die Datenquelle am Indexpfad Punkt geschrieben, um dieses Element zu erhalten, und wir werden es genau das gleiche tun hier unten und bereiten sich für Segway vor, so dass wir die Aufgabe für unsere Gäste zuweisen können detaillierte Ansicht Controller basierend auf dem ausgewählten Index Pfad, rudern für uns selbst und das war's. Also lassen Sie uns voran und bauen dies und überprüfen, dass wir bauen und es muss der ausgewählte in seinem Weg sein , dass ein weiteres Mal und alles gut ist. Und jetzt noch eine Sache, die wir hier tun können, aber bevor wir rennen. Das ist, äh, ein Grundprinzip des Debuggings ist, ah, Konzept der Verwendung von Breakpoints. Manchmal, wenn Sie Ihren Code durchlaufen möchten, um zu sehen, ob Dinge funktionieren oder nicht wie erwartet funktionieren, können Sie hier in der Seitenleiste gehen, wenn Ihre Zeilennummern nicht sichtbar sind. Was Sie tun können, ist in X-Code in Präferenzen zu gehen, und ich glaube, es ist unter Siehe hier. Wo ist das? Unter Schriftarten und Farben, Text-Bearbeitung von Zeilennummern. Also, unter Textbearbeitung Online-Nummern, können Sie all das auf und aus, um die bestimmte Zeilennummer zu sehen, wo Sie eine Pause zeigen wollen . Sobald Ihre Zeilennummern aktiviert wurden, können Sie hier in dieser Spalte auf der linken Seite gehen und auf eine kleine Stelle von Bruchpunkten klicken . Sobald dies geladen ist, können wir den Pfad der Ausführung sehen und die Dinge testen, die sie arbeiten, wie wir sie erwarten. Also jetzt gehen wir voran und führen Sie dies im Simulator aus. Ich gehe weiter und wähle das Programmieren aus. Und so sieht es so aus, als ob unser Segway fertig ist. Unser detaillierter View-Controller wurde gerade aufgerufen. Sie haben geladen wurde aufgerufen und jetzt überprüfen wir, um sicherzustellen, dass wir in der Lage sind, die Aufgabe, die wir entpacken erfolgreich zu übergeben . Und sicher genug, das Studienprogramm wird auf die Konsole ausgedruckt. So haben wir unsere Aufgabe erfolgreich von unserer To-Do-Liste an unseren detaillierten View-Controller . 8. 7. Subclassing von UITableViewCell: so weit beginnt, zusammen zu kommen. Aber wir müssen noch ein paar weitere Dinge tun, um es hübsch aussehen zu lassen und einige gängigere Elemente für die Entwicklung der Benutzeroberfläche in IOS zu verstehen . Aber um uns anzufangen, wollen wir auf das Thema Sub-Classing zurückgehen. Also natürlich unterklassifizieren wir Tara detaillierten View-Controller hier. Wenn Sie sich erinnern, indem Sie seine Klasse dem Detailansicht-Controller zuweisen, und wir können das mit vielen, vielen, vielen Elementen in Iowas besonders Klassen von Ihnen wie es und der nächsten Klasse tun, wollen wir eine Unterklasse , die es uns ermöglichen, mehr zu tun. Die Anpassung erfolgt auf unserer tatsächlichen Tabellen-View-Zelle. Also, wenn wir hier rüber gehen und wir erweitern unsere to do Liste Tabelle von Ihrem Controller und Ex-gewählte Zelle und wir gehen rüber zum Glasinspektor hier, können Sie sehen, dass gerade jetzt die Klassen nur Sie ich Tabelle von Ihnen verkaufen es nicht zugewiesen wurde . Es wurde nicht unterklassifiziert. Es gibt keine Möglichkeit, dass wir wirklich optimieren oder hinzufügen können. Das Testen ist in dieser Zelle, und das ist eigentlich etwas, was wir jetzt tun wollen. Also, was wir tun werden, ist zurück zu gehen, wo sich unser Quellcode im Projektordner befindet oder mit der rechten Maustaste, und wir werden eine neue Datei erstellen, und wir werden dies unsere zu tun Tabellenansicht selbst nennen. Eigentlich werden wir Task-Tabellenansicht tun, so ein wenig prägnanter, nicht klicken, erstellen, und wir gehen voran und importieren und die notwendigen Sie mögen es, die die Tabellenansichtszelle enthält. Und dann werden wir unsere Klassenklasse Task Tabellen-View-Zelle definieren, die von Ihnen ableitet ich Tabelle View-Zelle und wir werden voran gehen und das genau so für jetzt einrichten . Und was wir hier tun werden, ist, zurück zu unserem Storyboard zu gehen. Und jetzt, da wir eine Task-Tabellenansichtszelle erstellt haben, können wir uns dann in der eigentlichen Storyboard-Datei unterordnen. Also, wenn wir uns selbst ausgewählt haben und wir gehen zurück zu der Klasse hier, können wir Task-Tabellenansicht-Zelle tun und dort eingegeben, um sicherzustellen, dass es herauskommt. Und diese Unterklasse wurde gerade definiert. Und noch eine Sache, die wir tun können, was hier drin war. Wenn wir anfangen, schnellere Dateien hinzuzufügen, möchten wir versuchen, unser Projekt irgendwie schön und organisiert zu halten. Also, was ich tun werde, ist anfangen, Ordner zu erstellen und wenn Sie mit der rechten Maustaste auf Ihren Projektordner hier für den Namen Ihres Projektordners klicken und zur neuen Gruppe gehen. Aber Sie können tun, ist beginnen, Ordner zu erstellen, um diese Stücke von Quellcode zu setzen. Und so schwächen Dio, zum Beispiel, von euch Controllern. Und wir können unsere detaillierte Ansicht Controller und durch Shift nehmen, ziehen Sie die Shift-Taste und klicken Woche und wählen Sie dann sowohl das Detail und die zu tun Liste Tabelle, die Sie Controller. Und wir können sie dann in diesen View-Controller-Ordner ziehen und das wird sie direkt an die richtige Stelle dort verschieben . Und wir werden auch hier tun, ist, dass wir noch einen für ein Tischnahrungsmittel von euch selbst tun werden. Also die Tabelle paar Zellen und wir werden uns nehmen wir gerade erstellt es wird ziehen, dass in die Tabelle von euch selbst Ordner einfach so, und ich werde eine Sache für Modelle oder unsere Datenmodelle tun. Also, zwei Modelle zu sein und wir können ihr unsere Aufgabe übernehmen, und wir können das da reinlegen, und dann können wir einfach einen allgemeinen Ordner für Dienstprogramme haben oder einfach nur , Orte, an denen wir nicht wirklich etwas gut definiert haben, aber es wird an anderen Orten wie unserer Aufgabenhöhe verwendet. Also wollte ich einen Ordner namens Dienstprogramm erstellen. Wissen Sie, legen Sie einfach den Aufgabentyp da rein. Und so sieht es so aus, als hätten wir hier größtenteils alles organisiert, mit unserem Quellcode. Sie können auch mit der rechten Maustaste auf den Ordner und dio sortieren nach Namen, wenn Sie alphabetisch bevorzugen, und ich werde irgendwie alles eine schöne alphabetische Sortierung Ihrer Projektstruktur geben. Als nächstes wollen wir uns auf Styling konzentrieren, sind Tasked Cell. Und wenn Sie zurück in die Interviewliste gehen, Tabellenansicht-Controller und Sie sich daran erinnern, dass genau hier, als wir tatsächlich Deke Ewing die Zelle auf der Rückgabe waren . Wir weisen diese Textbeschriftungseigenschaft direkt hier zu, die den Text bindet. Aber wenn du zurückgehst und dir das Story-Board ansiehst, ist es nicht wirklich klar, dass irgendetwas passiert. Sie müssen folgern, dass das im Code passiert und irgendwie nett sein, wenn wir alles von unserem Storyboard hier visuell darstellen könnten , so dass wir den Code nicht durchgraben müssen um zu sehen, was los ist, und ich kann das nur ansehen, bis das. Okay, hier ist ein Etikett. Es wird Text auf dieser Zelle gebunden sein. Ich kann es verschieben, positionieren, die Schriftart ändern, die Farbe, alles so weiter und so weiter. Und das ist der nächste Schritt, den wir machen wollen. Und so, dies zu tun, wird ein paar Schritte erfordern. Ähm, wenn wir hier in unserer Hierarchie der Under-Tabellenansicht in uns bemerken, dass wir diese Inhaltsansicht haben . Also sagen wir, zum Beispiel, ich wollte etwas tun, wie nur die Hintergrundfarbe ändern, dass von weiß zu etwas anderem, und ich werde voran gehen und es zu gelb eso jetzt können Sie sehen, dass das wird visuell in der Inhaltsansicht der Zelle angezeigt. Wenn wir das also in unserem Simulator ausführen, werden wir voran gehen und sehen, was wie eine gelbe Zelle aussieht. Und sicher genug, haben wir die Farbe geändert. Nun, was ist, wenn wir die Höhe der Zelle ändern wollen? Was, wenn wir wollen, dass die Zelle etwas größer ist? Auf den ersten Blick denken wir, dass wir das einfach einfach nach unten ziehen und können größer machen können. Es scheint, als ob es gut funktioniert. Wir gehen voran und rennen im Simulator und Ah, und wir werden sehen, was in einem Moment hier passiert und schauen uns das an. Es hat keine Änderung vorgenommen. Also, was ist hier los? müssen wir diagnostizieren. , Es scheint,als gäbe es eine andere Einstellung, die die Höhe unserer Zelle überschreibt, und das ist etwas, was wir ändern müssen. Um die gewünschte Höhe vom Interface Builder zu unterstützen, gehen Sie zurück in den To do List Tabellen-View-Controller. Und es gibt eine andere Methode, die wir brauchen, um eine andere Methode zu verwenden, die wir überschreiben müssen . Also, wenn Sie sich erinnern, Anzahl der Zeilen und Abschnitt war, was uns die Menge der Daten in der Tabelle und Selbst-Road-Indexpfad gibt uns eine tatsächliche Tabellenansicht zurück. Sell Well, es stellt sich heraus, dass es eine andere Methode gibt. Höhe für Zeile am Indexpfad, der SCG float zurückgibt, und was wir tun möchten, ist herauszufinden, woher dies kommt und irgendwie verstehen was damit los ist. Also, wenn wir tatsächlich Befehle in den U I Tabellenansicht-Controller klicken, können wir sehen, dass es diese beiden Protokolle gibt, die Sie ich Tabellenansicht Delegaten und Sie ich Tabellenansicht Datenquelle. Nun sind Sie nicht in der Lage, Datenquellen, aus denen die Anzahl der Zeilen in Abschnitt und Selbst-Road-Indexpfad stammt. jedoch Sie habenjedocheinen Tabellenansichtsdelegaten, der andere Dinge enthält, die mit der benutzerdefinierten Anpassung unserer Zelle und Höhe zusammenhängen . Furrow ist eines der Dinge. Wenn wir also anfangen, Höhe für Zeile am Indexpfad einzugeben, können Sie das hier sehen. Äh, das ist eine der Methoden, die wir überschreiben können. Und es gibt eine sehr lange Beschreibung erhalten , vergleichen zeigen, dass hier kommt. Manchmal tut es das, manchmal nicht. Aber wir können hier sehen, dass hier diese Methode tatsächlich herkommt. Und es sieht so aus, als hätte es mich zu der objektiven C-Version von diesem, äh, ap ich von diesem Framework genommen, was in Ordnung ist. Aber wenn Sie hier durchblättern, gibt es viele andere Methoden, die wir zusätzlich zu diesem überschreiben können. Und so meine ich, es gibt eine Menge von Anpassungen schwächen dio auf einem Tisch von Ihnen, aber lassen Sie uns zurück und nur noch ein Mal zu klären, weil unser Tabellenansicht-Controller diesen beiden Protokollen entspricht. Es ermöglicht uns, bestimmte Methoden zu überschreiben, um Anpassungen in unseren eigenen View-Controllern durchzuführen, was genau das ist, was wir im Listen-Tabellenansicht-Controller tun. Also, wenn wir eine Höhe für einen Verkauf zurückgeben müssen, gut, dann müssen wir wahrscheinlich wissen, was diese Höhe sein sollte, Was der numerische Wert sein sollte, dass wir zurück. Auf eine Weise können wir das irgendwie tun und mit unserer visuellen Erwartung übereinstimmen, ist, wenn wir hier zurück ins Storyboard gehen und diese Zelle auswählen und wir gehen hier rüber zu diesem Symbol, das wie ein Lineal aussieht , der Größeninspektor, um, es hat hier eine Zeilenhöhe Attribute, die wir so einstellen und nach oben, nach oben und unten ziehen können . Sagen wir einfach, ich will, dass diese Straße e weiß nicht, 145 und Höhe ist. Also mit dieser Zahl, mit dieser Zahl hier gesetzt, ist das die Zahl, die wir in der Höhe für den Straßenindexpfad zurückgeben müssen. Also, hier werden wir nur 1 45 zurückgeben Jetzt gehen wir voran und führen das aus und sehen, wie es mit dieser Höhe aussieht und weil ich brauche , muss ich das Schlüsselwort zum Überschreiben hier setzen, weil wir diese Methode in unserem -Implementierung. Also lasst es uns laufen. Und so haben wir jetzt unsere Höhe, aber du wirst so sein, okay , warum ist es weißes Zeug los? Worum geht es das? Und 11 andere visuelle Debugging-Trick, den wir verwenden können, ist, dass es ein Symbol hier gibt, wenn Sie sehen wo sich mein Mauszeiger auf X-Code befindet. Und wenn wir, wenn wir klicken, dass es uns in die View-Hierarchie unserer App am Leben bringt. Und wenn wir hier anfangen zu klicken, können wir verschiedene Elemente unserer Struktur sehen. Wenn wir hier auf der linken Seite erweitern, können Sie sehen, dass Hasser, unseren View-Controller. Und wenn wir runtergehen, gibt es eine Tabellenansicht und hier ist eine Zelle, und dann so weiter und so weiter. Und wenn wir wirklich klicken, können wir sehen, dass Oh, ist ein Sie, den ich Tisch von Ihnen beschriften, genau hier. Es sieht so aus, als würden die Etiketten gestreckt und das scheint etwas seltsam zu sein, oder? Dann gehen wir zurück in unseren Code, wir finden heraus, OK, nun, nun, wo wir dieses Label signiert haben. Und warum wird es so groß gestreckt? Und wir sehen hier, dass wir hier tatsächlich unseren Text dem Etikett zuweisen. Also lasst uns genau richtig es auskommentieren und den AP noch einmal ausführen. So wird es frisch bauen und sehen, was sich das ändert. Und jetzt, obwohl wir den Text nicht binden, sehen Sie dieses weiße Etikett nicht mehr. Es ist weg, weil es nie zugewiesen wird. Wir werden am Ende unser eigenes Label benutzen. Wir werden nicht die tatsächliche Standardbeschriftung für die Zelle verwenden. Und anstatt nur ein Sie eine Tabelle von Ihnen verkaufen zurückgeben, werden wir den Aufgabentyp Zelle oder die benutzerdefinierte Zelle zurückgeben, die wir erstellt haben, so dass wir Kunden Asiaten auf sie stattdessen tun können . 9. Die Einführung von Introducing: Lassen Sie uns also beginnen, indem Sie unsere eigenen Etiketten zu unserem Verkauf gut an einem Etikett für Titel hinzufügen. Und ich denke, Lata Label für den Typ A Anschwellen zu beginnen. Was wir hier tun können, ist zu beginnen, hier auf der rechten Seite zur Objektbibliothek zu gehen und mit der Eingabe von Label zu beginnen. Und, äh, wir werden hier ein Label auf unser Storyboard ziehen und, und, äh, wir werden voran gehen und das einrichten und wir werden dio gut die Ecken hierher gezogen, um die innerhalb der Höhe. Welche Art von bringt an die Ränder? Diese kleinen gepunkteten Linien sind eine Art Layout-Hilfslinien, die Ihnen sagen, wo Sie irgendwie anhalten sollten . Ähm, Dragon Beyonce, weil das wäre außerhalb der, Sie wissen, die empfohlenen Richtlinien für die Benutzeroberfläche Stil Richtlinien es up für Apple bietet . Aber was wir hier tun können, ist zu versuchen, dass jemand so aussieht. Und wenn Sie zum Attributinspektor gehen, könnten wir anfangen, Schriftgröße und Farbpositionierung zu ändern, damit ich meine Positionierung von links Justified Teoh in der Mitte ändern kann . Ich kann auch meine tatsächliche Schriftart ändern, wenn ich dies standardmäßig tun möchte. Es macht Assistenzspaß. Aber wenn du hier unter Gewohnheit gehst, gehst, können wir anfangen, verschiedene Dinge zu tun. Ich denke, ich versuche einen anderen Telefonzehen. Lassen Sie mich sehen, ob hier irgendetwas ist, das ich gerne benutzen würde. Das sieht gut aus. Ah, Dio. Eigentlich denke ich, ich werde es behalten und verkaufen, dass es Sie jetzt können? Ich sehe da drin nichts, was mich interessiert. Ich ändere es in Ah, mutig. Wie wär's damit? Ähm, das ist in Ordnung. Und ich werde die Größe hier nur ein bisschen erhöhen, und ich denke, das sollte gut für diesen sein. Ähm, und wir werden auch dasselbe für den Typ tun, und wir werden einfach voran gehen und diese Art von unten setzen. Also ziehen wir ein anderes Etikett über. Und eigentlich, anstatt ein anderes Label zu ziehen, könnte einfacher sein, nur das zu kopieren, das wir haben. Führen Sie einfach das Kommando, sehen Sie? Und wenn Sie Ihren Cursor irgendwie irgendwo auf Ihrer Zelle bewegen und Befehle V einfügen erhalten, können wir das einfügen, das wir gerade kopiert haben. Und wenn wir das so ändern wollen, dass es wie etwas wieein Untertitel beleuchtet wird, anstatt eines Titels, Ähm, können wir einfach gehen. Und statt fett, mach es Ah, lass uns sehen, wie leicht es aussieht. Ja, ich nehme an, ich könnte arbeiten. bekommst das Set dort und positionierst Dubekommst das Set dort und positionierstes entsprechend. Eine Sache, über die wir nur reden müssen, ist, was als Auto-Layout bekannt ist. Und es ist im Grunde ein einschränkungsbasiertes Layout-System, das es uns ermöglicht, adaptive Benutzeroberflächen zu erstellen , Schnittstellen, die auf die Änderungen reagieren, wie die Geräteorientierung oder das eigentliche Gerät selbst. Möglicherweise laufen Sie auf einem IPHONE, SC, einem iPhone seven plus und iPhone 10. Es gibt viele, oder sogar ein iPad. Es gibt viele verschiedene Geräte und Bildschirmgrößen, die wir berücksichtigen müssen, wenn wir unsere APS entwerfen , und hier kommt das automatische Layout ins Spiel. Wenn wir also etwas über Einschränkungen verstehen wollen, müssen wir verstehen, wie wir diese Einschränkungen vom Storyboard oder vom Interface Builder anwenden ? Und so haben Sie wahrscheinlich gesehen, dass ich irgendwann ein paar Sachen hier mache, mit vielleicht horizontal und vertikal und Container zum Zentrieren von Dingen. Aber hier fangen wir an, von hier aus in unsere Zwänge zu geraten. Also, wenn wir zum Beispiel unseren Titel beschriftet auswählen zum Beispiel und wir gehen zu diesem kleinen Symbol hier, um neue Einschränkungen hinzuzufügen, haben wir auch hier Optionen . Grundsätzlich eingeschränkt. Sind Sie Element oder unser Label eine bestimmte Anzahl von Pixeln oder Punkten weg von oben? Die linke, die rechte unten, Diese Luft, Diese Luft, auch bekannt als die führende Seite in der hinteren Seite, wir haben Einschränkungen, um eine feste mit der festen Höhe Aspekt Neuauflage hinzufügen. Hier gibt es viele Dinge, mit denen wir basteln können. Und automatisches Layout kann manchmal für neue Entwickler frustrierend sein. Es dauert ein wenig Zeit, um es zu meistern und irgendwie zu verstehen, wie man Einschränkungen hinzufügt , die nicht mit Einschränkungen und anderen Elementen in Konflikt stehen. So eine praktische Sache, die Apple hinzugefügt hat, ist vorbei auf diesem Symbol hier. Es gibt eine Möglichkeit, Probleme mit einem Layout zu lösen, und es gibt Ihnen normalerweise eine Möglichkeit, vorgeschlagene Einschränkungen festzulegen, so dass Sie es irgendwie automatisch Dinge für Sie festlegen können , um, um, dass Sie möglicherweise nicht in der Lage gewesen sind, herauszufinden, auf eigene Faust. Und wenn Auto-Let-Auswahl getroffen wurden. Wenn du hier rüber gehst und in deinen Tisch gehst. Wenn Sie Ihre Inhaltsansicht verkaufen, sehen Sie jetzt, dass Sie einen kleinen Abschnitt in hier namens Einschränkungen haben. Ich muss erweitern, dass Sie tatsächlich jede einzelne Einschränkung in der Sammlung von Einschränkungen sehen können . Wissen Sie, Sie haben die nachfolgende, die Spitze, die führende und, äh, Sie wissen, dass Sie können überprüfen Sie alle Werte, die im Attributinspektor angezeigt hier nicht einmal Änderungen an ihnen, wenn Sie möchten. Aber was wir tun wollen, ist es sehr einfach zu halten. Also, was wir für unsere tun werden, ist, dass wir unsere manuell hinzufügen. Wir werden nicht den von Apple bevorzugten Weg machen. Also wählen wir unser erstes Label aus. Wir werden hier nach unten gehen, und was wir tun werden, ist eine oberste Einschränkung, eine linke oder eine führende Einschränkung, eine nachfolgende Einschränkung oder eine rechte Einschränkung und eine Höhe von 44 anzuwenden eine linke oder eine führende Einschränkung, und vier Einschränkungen hinzuzufügen. Und jetzt, im Grunde gesagt, dass, wenn unsere Zelle in der Höhe expandiert, Etiketten im Grunde bleiben werden fixiert und an der Spitze dieser Zelle fixiert, Es wird nicht wirklich überall gehen Jetzt gehen wir weiter und wenden ähnliche Logik auf unsere Untertitelbeschriftung unten. Wir werden es auswählen, wissen Sie, zurück hier drüben, und wir werden unsere Einschränkungen hinzufügen. Anstatt also eine Spitze zu machen, denke ich, wir werden versuchen, diese an den unteren Rand der Zelle anzuheften, so dass wir eine untere Einschränkung der Null nachgestellten oder rechten Einschränkung von Null in der führenden oder linken Einschränkung von Null in einer Verdeckungsbeschränkung tun werden von 44. Das wird also die Höhe und die Art von Stift reparieren, die nach unten verkaufen. Und so weit, so gut. Ähm, wir sehen ziemlich gut aus. Jetzt gehen wir weiter und führen Sie dies und sehen, wie es visuell in unserer Tabelle von Ihnen aussieht. Eine Sache, die wir hier tun müssen, ist nur sicherzustellen, dass Sie auskommentiert haben, wo Sie Ihren Text hier zuweisen. Sonst wird das alles außer Kraft setzen. Wir haben einen Interface-Builder gemacht, also lassen Sie uns das im Simulator und C ausführen, ohne den Text einzustellen. Das ist es, was wir haben. Wir haben unser Titellabel hier und sind ein Untertitel-Label unten und positioniert, wie wir sie im Interface Builder setzen . Und so habe ich mich entschieden. Nun, weißt du, ich sehe, ich habe mein Etikett hier unten gesteckt, aber ich denke, es sieht ein bisschen besser aus, wenn ich es nur ein bisschen mehr nach oben schiebe. Und so können wir das ganz einfach machen. Wenn wir hier zurück zu diesem kleinen Linealsymbol für den Größen-Inspektor gehen und darauf klicken, können wir die Y-Achse ein wenig anpassen, indem wir sie nach unten bewegen. Es bringt tatsächlich unser Label hoch. Also, wenn wir anfangen zu klicken, denke ich, meine war bei 90. Wenn wir es zum Lake 75 bringen, sehen meine Männer vielleicht ein bisschen besser aus. Du wirst sehen, dass ich all das orangefarbene Zeug hier reinkriege. Und das ist im Grunde Apfel, der mir sagt, Hey, hast du hier ein Problem? Sie sagten ein paar Einschränkungen, die besagen, dass dieses Ding die Y-Achse von 90 sein wird. Du bist gerade in 75 eingezogen. Was ist los? Geben Sie also einige Optionen, Sie können die Einschränkungen aktualisieren, was bedeutet, dass Ihre Einschränkungen anstelle von 90 eine 75 sein werden, die dieses Problem beheben wird. Sie können den Rahmen Ihrer Beschriftung entsprechend den Abhängigkeiten aktualisieren. Nun, wenn wir das getan haben, sind Einschränkungen bei 90. Nun, wir bewegen einfach alles auf 75. Wenn wir den Rahmen so aktualisieren, dass er der Einschränkung entspricht, wird er tatsächlich verschoben. Sind markiert zurück nach unten 90 s. Wir wollen nicht, dass, wo wir Apple wieder berechnen lassen können die Einschränkungen ganz auf tun es für uns. Und so wollen wir das nicht wirklich tun, weil diese Art von Niederlage den ganzen Zweck was wir getan haben. Eso Eine weitere Option ist, dass Sie diese Änderungen hier eine Dünung vornehmen können, so dass Zeit zurück auf die Ergebnisflasche zu gehen ein Problem Sie haben auch, dass Optionen, Sie aktualisieren die Einschränkung, Konstanz. Das ist wirklich das, was wir wollen. Denn wenn wir das tun, sagt es im Grunde diese Einschränkung, hey, erwarten, dass dieses Ding bei 75 ist, nicht bei 90, und dann werden Sie sehen, dass diese Warnung einfach verschwunden ist . Und jetzt lassen Sie uns das laufen und sehen, wie es aussieht. Und so sieht das ein bisschen besser aus. , Gut genug für das,was wir jetzt tun wollen. Eine andere Sache, die Sie vielleicht merken, ist, als gäbe es hier eine Trennlinie. Diese Art von Aussehen tun es jetzt, da wir begonnen haben, etwas von dem Styling zu ändern, und es ist schön, wenn wir das ausschalten könnten und es stellt sich heraus, dass wir können, es ist tatsächlich eine Eigenschaft der Tabellenansicht. Also, wenn wir zurück zum Storyboard gehen und wir wählen die Tabellenansicht hier drüben und dann zum Attributinspektor gehen hier, gibt es eine Eigenschaft namens Separator, die es auf einen Standardwert sagte. Eso Was wir tun können, ist, dass wir das von der Standardeinstellung auf keine umwandeln können, wenn wir uns dafür entscheiden. Und wenn wir das jetzt ausführen, schauen wir mal, wie das aussieht. Also sehen Sie jetzt, dass dieser Separator komplett verschwunden ist , sagen wir, wir wollen unseren eigenen, ähm, Separator hinzufügen ähm, , vielleicht ein bisschen dicker, der ein bisschen größer aussieht. könnten wir tun, um und wieder. Es ist eine weitere Gelegenheit, mit viel Layout zu üben. Also statt eines Labels, was wir hier tun werden, ist nach Ihnen zu suchen, haben Sie und es ist nur eine einfache Ansicht wie diese. Wir werden das in die Inhaltsansicht von uns ziehen, und wir werden versuchen es hier zu bekommen. Und was wir tun werden, ist, das wirklich klein zu machen. Ich denke, eine Höhe von ah, vielleicht acht wird für jetzt gut sein und der Lebenslauf in ein wenig, weil ich in meinem Trackpad sitze . Ich werde die Kanten dieser Ansicht den ganzen Weg bis zum Rand dieser Zeit ziehen, nicht zu den empfohlenen Richtlinien, um unsere eigene kleine Trennleiste zu erstellen. Und was ich hier tun werde, ist nicht eine Position, dass ich auf einige Einschränkungen gehen werde, um es nach unten zu stecken und diese Höhe so ähnlich zu fixieren, also was wir mit diesem Untertitel-Label gemacht haben . Ich werde eine Einschränkung von Null an der unteren Einschränkung von Null für das Recht oder das nachfolgende in einer Einschränkung von Null für die linke oder die führende und eine Höhe von acht tun. Es geht darum, diese Liebe zu tun, die genau dort fixiert ist, wo wir sie wollen. Und ich werde auch die Farbe dieser Ansicht in etwas anderes als Weiß ändern. Wenn ich also zum absoluten Inspektor hier komme, denke ich, Schwarz würde wahrscheinlich ziemlich gut aussehen. Hier ist, damit wir es so aussehen können. Lassen Sie uns das jetzt noch einmal ausführen und sehen, wie das visuell in unserem Simulator aussieht . Und vielleicht ist diese Bar ein bisschen zu dick, also ist das in Ordnung. Wir können einfach gehen und es anpassen, genau wie wir es bei der Aktualisierung unserer Einschränkungen getan haben. Also wieder, eine weitere Gelegenheit, auf dem Layout zu üben. Wir können so fest fallen lassen von vielleicht sieben Teoh von acht bis vielleicht vorher würde ein bisschen besser aussehen . Und Sie werden hier feststellen, dass meine kleinen Teileransichten nach oben verschoben wurden, da ich die Höhe verringert habe . Also wollen wir Zeh, wenn wir, wenn wir die Höhe um vier verringern, wir sie nicht um vier auf der Y-Achse nach unten drücken würden. Sie können das also von hier aus tun, wenn Sie wollen. Oder Sie können einfach nur versuchen, es so nach unten nach unten zu ziehen, Ähm, und Sie können es direkt an den Rand dort bekommen, und Sie werden immer noch dieses Ähm, und Sie können es direkt an den Rand dort bekommen, Orange haben, weil Sie nur Änderungen am Rahmen vorgenommen ohne Aktualisieren der Abhängigkeiten. Also müssen wir einfach zurückgehen und es tun. Wir haben vorher für die Lösung von verwandten Problemen getan. Und wir werden die Constance Constance aktualisieren, um dem Frame anzupassen, an dem wir gerade angepasst haben, und sehen, wie das jetzt aussieht. Und ich wette, das sieht ein bisschen besser aus und was wir vorher hatten, und ja, ja, ich denke, das ist gut genug, um mit zu arbeiten. Wir könnten vielleicht etwas dünner werden, aber es ist nicht das Ende der Welt. 10. In der Task Table View Zelle ziehen: Jetzt haben wir unsere Zelle entworfen, aber wir müssen Sie immer noch vollständig ersetzen. Ich tabelle Ansichtszelle im Selbst-Road-Indexpfad, um unsere Aufgabentabelle von Ihnen verkaufen zu verwenden. Und so müssen wir das jetzt tun. Gehen wir also zurück zum Tabellenansicht-Controller Müssen weniger tun, um Ihren Controller zu kippen. Und wir wollen selbst zurückkehren. Straße Indexpfad hier. Und so sofort. Wenn Sie anfangen,Tabelle zu tippen, werden Sie feststellen,dass der Typ Sie sind. Sie anfangen, Wenn Sie anfangen,Tabelle zu tippen, werden Sie feststellen, feststellen, Ich lege dir selbst vor, dass das nicht funktioniert, wenn du eine Zoll-Up-Klasse benutzt, , die wir erstellt haben, was die Task-Tabelle ist, die du verkaufst. Es ist also wirklich kein Problem dessen, was wir hier tun können, ist, da unsere Task-Tabellenansichtszelle eine Tabelle von Ihnen ist, können wir sie einfach als Aufgabentabelle umwandeln. Du verkaufst, und wir werden es tun. Hier ist, da das ein optionaler Nun, machen Sie einfach einen Scheck. Also, wenn die Tabellenansicht Leute unseren Testtisch selbst verkaufen lassen, werden wir etwas anderes tun. Was wir hier tun können, ist eine Bar zu finden. Äh, Zelle ist gleich, dass Sie eine Tabelle von sich selbst haben, damit Sie mit einer neuen Instanz einer Zelle beginnen können . Und wenn wir hier tatsächlich beseitigen können oder sonst Aussagen und wenn wir unsere Tabellenansicht bekommen, verkaufen Sie hier den Typ der Zelle, es wird eine Task-Tabelle selbst sein. Ähm, was wir hier tun werden, ist für die technische Rückkehr, wir werden die Zelle zurückgeben, und dann werden wir das selbst sagen. Augen sind Tisch, du verkaufst also tun wir es dort. Wir werden das hier und jetzt löschen. Wir sagen im Grunde, dass wir eine neue Zelle bauen werden, weil wir nicht zurückkehren können , bis sie verkauft wird, als Gegenleistung einen Wert verlangt hat. Wenn wir in der Lage sind zu dick, sind Sie Zelle als Aufgabentisch von Ihnen. Also gehen Sie weiter und weisen Sie den Verkauf hier zurück und geben Sie ihn zurück. Aber es gibt immer noch eine Sache, die wir vermissen. Wir müssen die Zelle so konfigurieren, dass sie das Datenmodell an die tatsächliche Ansicht binden kann, um tatsächlich die Beschriftungen für den Aufgabentitel und die Aufgabenkategorie zu setzen. haben wir noch keinen Code geschrieben. Eso was schwächen dio ist, wenn wir zu unserer Aufgabe Tabelle gehen Sie verkaufen. Wir haben hier nichts implementiert, aber wir werden eine neue Funktion erstellen. Wir haben hier nichts implementiert, Also Telefon konfigurieren mit Aufgabe und die Parameter geht in die A-Aufgabe, die das Datenmodell ist. Und wir müssen voran gehen und Interface Builder Outlets erstellen, die uns unsere Labels wieder mit der Klasse hier verbinden lassen , so dass wir die Bindungen tun können, wenn wir eine Konfiguration mit der Aufgabe erhalten . Also tun wir hier ist der Assistent Editor öffnen. Also dachte ich, das öffnen Sie hier und es sieht so aus, als hätte ich das zu weit von Ihnen ausgestreckt , um zu sehen, ob ich diesen ein wenig gleitenden Server zusammenbrechen könnte. Und ich werde mein Storyboard bei einem der 10 Schmerzen hier aufbringen. Und so, wenn wir in diese Zelle gehen und wir erweitern die Inhaltsansicht, können wir sehen, dass wir diese beiden Beschriftungen den Titel haben und es heißt jetzt, da wir unterklassifiziert diese Zelle ist Aufgabe Tabellenansicht Zelle. Wir haben eine direkte Verbindung zur Quellcodedatei, damit ich Interface Builder Outlets direkt zum Code erstellen kann . Sie halten also die Strg-Taste gedrückt und klicken und ziehen dann auf die Zelle innerhalb der Klasse. Und ich freue, ich kann hier eine neue Verbindung vom Typ Steckdose kochen. Und da ich das erste Label ausgewählt habe, wollte ich diesen Aufgabentitel als Label und verbunden nennen. Und ich werde auch das Gleiche für den Titel direkt darunter tun, und ich werde die Steuertaste gedrückt halten . Klicken und ziehen Sie hier. Es hieß diese Aufgabe. Also Titel so und dann gehen wir weiter. Und wenn wir eine Aufgabe bekommen, um unsere Tabelle Ansicht Zelle zu konfigurieren, Sie können einfach tun Aufgabe Titel Dieser Text entspricht Aufgabe den Titel. Und so haben wir hier ein kleines Problem. Wenn Sie mit der Eingabe des Aufgabenpunkts beginnen, wird nur der Titel angezeigt. Und wenn Sie sich daran erinnern, warum, zeigen wir nur den Titel. Ursprünglich, als wir den Tisch von sich selbst verwendet haben. Also kein Problem, das wir tun müssen, ist hier zurück zu gehen und etwas anderes von privat zu intern auszusetzen , so dass wir außerhalb der Klasse darauf zugreifen können, sind die Task-Klasse. Also, um das zu tun, tun Sie das einfach. Wir können einfach private von der Art entfernen und haben nur so seine interne lassen, was die Menge an Maine intern ist. Es ist wirklich das, ähm intern sind die Akteure als Thea-Zugangstyp. jedoch Wenn Siejedochnichts internes angeben, ist der Standard so privat explizit. Intern ist implizit, es sei denn, Sie machen es explizit, indem Sie intern eingeben. Also nur etwas, das man sich erinnern kann. Gehen wir jetzt zurück. Wir haben unsere Aufgabe zusammengefasst. Untertitel So Vorgangsuntertiteltext entspricht Vorgangspunkt Und wenn Sie den Typ nicht sehen können, Befehl darin, das Projekt zu erstellen, damit der Pilot die Änderung aufnehmen kann. Wir haben gerade den Zugriffsmodifikator gemacht und dann sollten Sie sehen, dass der Typ hier in dieser Liste angezeigt . Also sofort, wir werden hier ein kleines Problem haben. Also sofort, Das Problem besteht darin, dass wir die Zuordnung nicht vornehmen können, da Vorgangstyp keine Stärke ist. Es ist nur buchstäblich im Namen einer Aufgabe, geben Sie ihren eigenen Typ ein. Es gibt also ein paar Möglichkeiten, wie wir umgehen können. Dies wahrscheinlich der einfachste, wird nur dies in seine Zeichenfolge mit dem Indium konvertieren. Also, wenn Sie in Ihren Aufgabentyp gehen, was wir hier tun können, ist sagen, dass dies eine Zeichenfolge sein und schwächen wird. Wir können eine Art ah String lesbaren Wert für jeden dieser Fälle machen, so dass wir anstatt alle Kleinbuchstaben zu studieren, können wir sagen, dass wir so studieren, können wir hier einen Standardwert für andere Arbeit tun. Nein, wir können so beschichten. Schwächen dio Urlaubsplanung ist so. Es ist also ein bisschen menschlicher lesbar, wenn wir es an jede Art von Ihrem Element binden. Also zurück hierher, ähm, dass, weil es jetzt ein String-Typ ist, können wir mit dem Taif kombiniert und wir mit dem Rohwert kombiniert werden, der die eigentliche Zeichenfolge selbst ist. Möglicherweise müssen Sie den Befehl tun, ein Projekt hier zu erstellen eso, dass es erfolgreich kompiliert. Aber sehen Sie, sobald ich es nach dem Kompilieren erneut eintippe, habe ich einen Rohwert, eine Zeichenfolge ist, die auftaucht. Also, ähm, was wir hier wahrscheinlich tun können, ist zu ändern, weil wir nicht wollen, dass dieser Typ nur ein wenig lesbarer ist, damit wir so etwas tun können. Dio-Band schwächen, und dann können wir in unseren kleinen Aufgabentyp injizieren, wie diese bekam Band, Aktienwert Also es geht, um dies im Simulator laufen, es sieht, wie es aussieht. Aber eigentlich, bevor wir das schaffen, hätte ich es fast vergessen. Wir müssen die Konfiguration hier durchführen. Der letzte Schritt wird also in der Nähe sein. Unser Assistenzredakteur hier, Tabelle von Ihnen verkauft Denkfigur mit Aufgabe, und , äh, diese Aufgabe wird etwas sein, das wir brauchen, um wieder in die Datenquelle zu gelangen. Also, was wir hier tun, ist einfach ah lassen, lasst uns fragen gleich Datenquelle am Indexpfad dot ro. Und wenn du dich erinnerst, ich war irgendwie schon so vorbeigegangen, aber ich bekomme nur explizit die Aufgabe, nur um dir zu zeigen, dass du es auch so machen kannst wenn du etwas expliziter sein willst, ähm, und dann die Aufgabe so übergeben, um die Konfiguration durchzuführen. Also lasst es uns jetzt laufen. Und wir sollten alle unsere Bindungen mit dem neuen Zusatz unseres Untertitels an unser Label gebunden haben. Und sicher genug, können Sie sehen, dass das Studium der Programmierung Website Codierung, tun Wäsche Art Hausarbeit und Planung Reise nach Spanien der Art Urlaubsplanung. Alles scheint zu funktionieren 11. Den Task Creator View erstellen: jetzt, an dieser Stelle im Tutorial, haben wir definitiv viele Fortschritte in unserer Tabellenansicht-Liste gemacht. Aber das Problem, das wir jetzt haben, ist, dass wir nur drei Elemente haben, die im Grunde hart codiert sind . Wir haben keine Möglichkeit, dynamisch neue Aufgaben zu unserer Liste hinzuzufügen, und das ist etwas, das wir in diesem Teil des Tutorials eso beheben werden. Was wir hier tun können, ist, dass wir eine Navigationsleiste haben. Wir können hier oben rechts einen Plusknopf hinzufügen. Und im Grunde, wenn wir auf die Plus-Taste klicken, wird es einen anderen View-Controller laden. Das wird es uns ermöglichen, eine neue Aufgabenliste in das Formular einzugeben, und dann können wir sie speichern und direkt in unsere Liste geladen werden. Und so ist der erste Ort, um loszulegen, wieder in unserem Storyboard. Also, was wir hier tun werden, ist, dass wir zurück gehen und zur Objektbibliothek hier gehen. Es ist nicht tippen Bar Button Element, und dies ist eine Art von Schaltfläche, die wir zu einer Navigationsleiste oder einer Symbolleiste hinzufügen können, und wir können einfach ziehen Sie es hier oben links oben oben rechts, und das wird uns eine schöne Schaltfläche, die wir verwenden können von hier. Und sobald wir unsere Schaltfläche ausgewählt haben, werden Sie feststellen, dass es unter dem Navigationselement, rechten Leisten-Button Elemente und dann das eigentliche Element hier angezeigt wird. Und wenn wir zum Attributinspektor gehen, können wir bestimmte Attribute auf unsere Schaltfläche ändern. Zum Beispiel. Vielleicht möchten wir anstelle dieses benutzerdefinierten Auswahlstils eine Anzeige erstellen, die dieses Symbol in ein Plus-Symbol ändern würde, was für das, was wir versuchen, sinnvoll ist. Wir können auch den Versuch von der Standardblau ändern, um vielleicht etwas, das passender für unser Thema aussieht , das gelb und schwarz ist. Also könnte ich so etwas auch tun. Und sobald wir das getan haben, was wir jetzt tun wollen, ist die Interface-Builder-Aktion anzuschließen, wenn auf diese Schaltfläche getippt oder geklickt wird . Wenn wir also zurück gehen und den Assistenten Editor öffnen und unser Storyboard auf der einen Seite und unseren to do List Table View-Controller auf der anderen Seite setzen , können wir voran gehen und diese Aktion erstellen. Also, wenn wir hier irgendwie in unseren Code gehen, wählen Sie einfach einen beliebigen Ort und wir wählen unsere Schaltfläche. Wenn wir die Steuerungstaste gedrückt halten, können wir klicken und ziehen Sie dann über zu unserer Datei und vom Verbindungstyp aus der Steckdose. Wir werden das in Aktion ändern, und wir nennen diese erstellen, ah, ah, neue Aufgabe angezapft und verbinden sie. Und so wirklich, an diesem Punkt ist, wo wir hingehen. Stattdessen aß sie den neuen View-Controller, den wir erstellen müssen, indem wir ihn vollständig präsentieren. Und sobald das angezeigt wird, , geben Sie eine neue Aufgabe in diesen View-Controller ein, speichern Sie sie und laden Sie sie dann automatisch neu. An diesem Tag, diese mu-Aufgabe in unsere Liste. Jetzt sind wir bereit, unseren View-Controller zu erstellen. Gehen Sie also zurück zur Objektbibliothek hier. Wir werden einen neuen View-Controller auf die Storyboard-Canvas ziehen, und das wird unser Task Creator View-Controller sein. Ähm, was ich hier tun werde, ist, dass ich es einfach gelb stylen werde und irgendwie das gleiche Thema, das wir für die App verfolgt haben. Sie können wählen, welche Hintergrundfarbe Sie verwenden möchten, also werde ich es jetzt einfach so lassen. Und was ich als nächstes tun muss, ist tatsächlich die Quellcodedatei für diesen View-Controller zu erstellen und ähnlich, wie wir es mit den anderen beiden getan haben, indem wir eine neue schnelle Datei erstellen. Und wir werden diesen einen Task Creator View-Controller nennen. Nun, dann gehen Sie weiter und importieren Sie in Ihr Kit, das die Sie haben Controller-Klasse enthält. Und wir werden einfach unsere neue Klasse als Klasse Task Creator definieren. Wenige Controller von müden Laufwerken von Ihnen. Ich sehe den Controller an und überschreibe die Ansicht, die als Einstiegspunkt in diesen View-Controller eso geladen wird. Sobald wir das getan haben, ähm, wenn Sie Ihren Assistenzeditor hier geöffnet haben, können wir zurückgehen und die Quellcodedatei einbinden , ,damit sie dem neuen Controller und dem Interface-Builder zuordnet. Also, wenn wir in Ihrer Ansicht ausgewählt, Controller, wir haben gerade erstellt wir gehen zum Klasseninspektor hier, wir können voran gehen und das als Aufgabe Schöpfer von Ihnen Controller zu finden und wir werden einfach voran gehen . Und auch ist, dass das Storyboard i d und die Wiederherstellungsidee für den Fall, dass wir etwas programmatisch später tun müssen . Und wirklich, was Dio schwächen ist von hier sind neue Plus-Taste. Wir können voran gehen und eine aktuelle Mota Lee-Option hier machen, um Newtowns Creator View-Controller zu sichern , äh, wenn wir den Knopf setzen. Also lassen Sie uns voran gehen und testen, dass im Simulator wirklich schnell und sehen, wie das aussieht. Und so öffnen sich meine Simulatoren hier und ich drücke meinen Plusknopf und da gehen wir. Also lädt mein Test-Ersteller-View-Controller. jedoch Moment haben wirjedochkeine Möglichkeit, dies zu verwerfen, weil wir keinen Zurück-Button oder irgendeine Art von Safe Button haben. Das ist also das nächste, was wir implementieren müssen, ist die Benutzeroberfläche für den Task Creator View-Controller. 12. Task Creator View Creator: Das nächste, was wir tun müssen, ist die Benutzeroberfläche für einen Test Creator View-Controller zu entwerfen . Bevor wir das tun können, müssen wir irgendwie sehen, welche Elemente wir hinzufügen müssen, die erforderlich sind, um eine Aufgabe zu erstellen. Also, wenn wir zurück zu der Aufgabe Punkt swift in unserem Models-Ordner gehen und wir uns unsere Task-Klasse ansehen , können wir sehen, dass wir drei Dinge hinzugefügt haben. Wir haben einen Titel, wir haben ein Fälligkeitsdatum und wenn wir einen Aufgabentyp haben. Beginnen wir also mit dem einfachsten, der der Titel sein wird. Und was wir dafür tun können, wird über ein Textfeld gezogen. Wenn Sie also zum Storyboard und in der unteren Ecke hier für die Objektbibliothek gehen, wenn Sie ein Textfeld eingeben, ziehen Sie über ein Textfeld auf das Storyboard, und dies wird unser Eingabefeld für unseren Aufgabentitel sein, Also, was wir hier tun können, ist anfangen, diese Position zu positionieren, ähm, wo wir hin wollten. Ich werde es gerade hier holen. Und das nächste, was tun wird, ist zurück zu gehen und die Schnittstelle Builder Steckdose für unser Textfeld hier in unserem View-Controller anzuschließen . Gehen Sie also zurück zum Task-Ersteller Ihres Controllers und direkt darüber haben Sie geladen, was Schwächen Dio ist, diese Verbindung zu erstellen. Also, halten Sie die Strg-Taste gedrückt, können wir klicken und ziehen Sie über in den View-Controller, und wir rufen nur dieses Task-Titel-Textfeld. Als nächstes gehen wir weiter und fügen Sie zwei weitere Textfelder hinzu, Also lassen Sie uns voran und ziehen Sie auf zwei weitere. Also Drache hier und ein anderer hier und wollte die rausziehen. Also sind sie alle gleich mit tun das gleiche wieder für die 3. 1 Und das nächste, was wir brauchen, ist eine Schaltfläche, um den Prozess zum Erstellen einer Aufgabe tatsächlich aufzurufen. Also, wenn wir mit der Eingabe für die Schaltfläche beginnen, ziehen wir auf die eigentliche Schaltfläche, die hier oben kommt nicht die Balken-Taste, sondern Element, sondern nur eine Schaltfläche. Also ziehen wir das über auf das Storyboard, und wir können hier tun, ist anstelle der Textschaltfläche. Wir können zum Attributinspektor gehen und eine Aufgabe eingeben, um zu erstellen, und Sie können die ah in die Höhe ziehen, um dort eine größere Schaltfläche zu bekommen, und ich werde die Farbe meiner Textfarbe in Schwarz ändern. Ich könnte beim Thema unserer App bleiben. Und ich werde auch die Schriftart hier ändern, von benutzerdefinierten, ich denke, ich werde etwas anderes versuchen. Also Helvetica neu ist der Typ dort, aber ich werde etwas über Ah sehen, aber ich habe hier Traven installiert und dann machen wir Ah, vielleicht einen mutigen Gedanken hier. Also Helvetica neu ist der Typ dort, aber ich werde etwas über Ah sehen, aber ich habe hier Traven installiert und dann machen wir Ah, Schwerere Schrift, wenn wir können. Nun, es größer und nur für die erhöhte Schriftgröße aus ziehen Sie das ein bisschen mehr. So haben wir jetzt die meisten unserer Eingabe-Controls erstellt. Das nächste, was wir hinzufügen können, um diese von Ihnen Kontrolle ein wenig polierter zu geben, ist ein Name wie im Grunde ein Titel in einer Weise, um aus ihm herauszukommen. Weil wir jetzt keine Möglichkeit haben, diesen View-Controller zu entlassen. Wahrscheinlich wäre der einfachste Weg hier das Hinzufügen einer Navigationsleiste. Und jetzt wirst du es hier bemerken. Als ich mit einer Navigation begann, sehen Sie Navigationscontroller und Navigationsleiste. Der Hauptunterschied besteht darin, wenn Sie sich in den vorherigen Tutorials erinnern, ist der Navigations-Controller eine spezielle Form eines View-Controllers, der Ihnen die Navigationsleiste zur Verfügung stellt . jedoch Dies istjedochein View-Controller, den wir Motive Lee präsentieren. Wir sind nicht und hatten dies in einem Navigationscontroller per se gewettet. Also, wenn wir tatsächlich einen beweglichen Segway handeln, wie wir es hier getan haben , der den Plusknopf hat, der den Segway den ganzen Weg nimmt, um zu hören, erinnern Sie sich, dass es von unten kommt. Es wird nicht so auf den Stapel geschoben, wie ein anderer View-Controller innerhalb eines Navigationscontrollers ausgeführt wird. Aber wir können immer noch die gleiche Art von Aussehen mit der Navigationsleiste simulieren. Also, wenn wir nur die Navigationsleiste auf unseren View-Controller drachen, was wir hier tun können, ist, ah, beginnen, etwas zu schaffen, das irgendwie immer noch ähnlich aussieht. Aber es verhält sich in einer mobilen Präsentation. Also mit der Navigationsleiste, die oben hier drüben gezogen wurde, nun, können wir. Dann fügen Sie eine Schaltfläche hinzu, um dies zu schließen. Also, wenn wir anfangen, für Schaltfläche und falsch geschrieben zu tippen, aber in ihren Aufgaben, ziehen wir über eine Leiste, aber ein Element auf die linke Seite dieser Navigationsleiste und was wir hier tun können , ist, wenn Sie Ihre Navigationsleiste auswählen und Sie gehen über und öffnen kleines Seitenmenü unten hier, wenn Sie tatsächlich einen Blick auf die Ansichthierarchie für das Steuerelement nehmen Navigationsleiste hat einen Titel, eine linke Leiste, aber ein Element hier mit einem tatsächlichen Element darin. Also, das ist eigentlich dieser Artikel, und es hat die Möglichkeit, auch einen rechten Balken hinzuzufügen. Aber Nacht, ähm, wenn wir hier einfach über einen anderen Gegenstand ziehen würden, könnten wir effektiv eine weitere Schaltfläche erstellen. Aber wir brauchen wirklich keins für diesen hier. Wir brauchen nur einen Weg, um aus ihm herauszukommen, indem wir ihn entlassen. Also der linke hier ist gut genug für den Moment. Was wir also tun können, ist, indem wir den Titel ändern. Wenn Sie den Titel hier auswählen und Sie zum Attributinspektor gehen, hat es einen Standardtext den Titel gesetzt, so dass wir einfach diese neue Aufgabe aufrufen oder eine neue Aufgabe erstellen können. Mal sehen, wie es aussieht. Das sieht also in Ordnung aus. Um und dann, wenn wir auch den Text für die eigentliche Schaltfläche ändern wollen, wenn wir nach links gehen Barbara-Elemente und dann wählen Sie das eigentliche Element, das es die Schaltfläche ist. Wir können hier gehen und einige der Attribute im Attributinspektor ändern, so dass Sie hier sehen werden. Es lädt es mit dem Elementtext unter dem Titel. Wir können den Text zum Beispiel einfach zu nah ändern , und Sie werden sehen, dass er ihn hier aktualisiert. Eine andere Sache, die wir tun können, ist das Zelt zu wechseln. Es gibt blau ist die Standard-Zelte, aber wenn wir unser Thema behalten und es in die schwarze Textfarbe ändern wollen, die funktioniert, gibt es ein paar andere Optionen hier. Ich glaube, es gibt eine fertige Option, die dies nur einige der Standardeinstellungen sind, die Apple bereitstellt. Ähm, abbrechen, rückgängig machen. Speichern Sie einige davon, die Sie sofort verwenden können, wenn Sie möchten. Ich werde das rückgängig machen, nur weil ich in der Nähe auch verwenden möchte, gibt es verschiedene Stile, die Sie Grenze gegen Ebene verwenden können. Uh, sie zeigen nicht wirklich viel visuelle Veränderung im Storyboard, aber es gibt nur ein paar verschiedene Optionen, die Sie ändern können, so und jetzt, wo wir den größten Teil unseres Formulars ausgefüllt haben, müssen wir beginnen, alles in die richtige Position zu bekommen. Insbesondere wollen wir versuchen, diese Steuerelemente fixiert jemand in der Mitte des Formulars zu halten , aber wir müssen es ein wenig eleganter machen. Der Grund, warum wir uns um unser Layout kümmern müssen, ist, wenn Sie Ihren View-Controller auswählen und Sie hier nach unten gehen, wo es Ansicht sagt und Sie beginnen, verschiedene Gerätegrößen auszuwählen . Zum Beispiel bin ich auf dem iPhone acht. Aber wenn ich darauf klickte, sagen wir einfach das iPhone S c und du gehst zurück, du kannst sehen, dass jetzt alle meine Elemente nicht zentriert sind. Dasselbe hier. Wenn ich zu den vier s gehe, sieht es noch schlimmer aus, wenn ich hier zum iPhone 10 gehe. Es sieht auch irgendwie schlecht aus. Ähm, und auf dem iPad wird es wirklich sein, dass eso Das ist eine Art von unserem Problem, das wir lösen wollen, ist, wie wir eine Schnittstelle erstellen , die über unsere Gerätegrößen ziemlich gut aussieht, und dort kommt das automatische Layout ins Spiel. Und speziell können wir verwenden, was ein Stapel von Ihnen genannt wird, der viele der vertikalen oder horizontalen Stapeln von Elementen verwaltet, die in ähnlicher Weise ausgelegt sind . So etwas, und es ermöglicht uns, die Einschränkungen nicht implementieren zu müssen. Suman akribisch ein Interface Builder. Es verwaltet einige der Auto-Layout für uns oder macht es ein wenig einfacher auf DSO. Das ist, was wir als nächstes tun werden, ist unsere Stack-Ansicht zu erstellen, um diese Elemente im Grunde zu kapseln und sie vertikal zu positionieren . Es war ehrlich zentrieren sie in diesem View-Controller. Was wir also tun müssen, ist, alle unsere Steuerelemente gleichzeitig auszuwählen. Eine Sache, die Sie tun können, ist ein Feld um sie so ziehen, oder Sie können die Umschalttaste nach unten ziehen und klicken Sie auf jede einzelne mit gedrückter Schiffstaste . Und es ist wie sie alle zur gleichen Zeit und was wir tun müssen. Bevor wir die Stack-Ansicht hatten, wie wir sagen wollen, dass wir mit oben gleich sein wollen, dass sie gerade jetzt sind , wollen wir nicht, dass diese sich ändern, also können wir hier tun, gehen Sie zu dieser Schaltfläche und fügen Sie ein mit ihm voraus Einschränkung, die es für jedes einzelne Steuerelement, das in dieser Gruppe ausgewählt wurde, hinzufügt. Jetzt bemerken Sie, dass hier alles rot ist, weil wir grundsätzlich Einschränkungen konfiguriert haben nicht genug Informationen für das automatische Layout sind, um zu wissen, wo diese Dinge positioniert werden sollen. Deshalb gibt es uns Fehler oder Beschränkungsfehler. Das ist in Ordnung. Wir werden das reparieren, während wir weitermachen. Also, jetzt, dass innerhalb der Höhe für jeden ist fixiert. Wir können sie in eine Stapelansicht einbetten, indem Sie diese Schaltfläche hier drücken, und Sie werden feststellen, dass sie alle zusammengeschüttet sind. Es gibt keinen vertikalen Abstand mehr zwischen ihnen und ah, mit und die Höhe bleibt immer noch unverändert, was wir wollen. Also, jetzt kann ich für dich um den Stapel ziehen. Und wenn Sie hier in den Task-Creator-View-Controller schauen, erweitern sie die Ansichtshierarchie. Sie können sehen, dass, wenn Sie nach unten gehen, haben Sie Ihre Navigationsleiste und ich verstehe Sie. Und wenn Sie es erweitern, sehen Sie, alle unsere Elemente werden auf der Innenseite hinzugefügt. Also was? Wir können es hier tun, also wählen Sie tatsächlich unseren Stack für Sie und Art der Position in der Mitte hier und was wir dann tun können, ist hier zum Attributinspektor zu gehen und beginnen, einige der Eigenschaften für unsere Stack-Ansicht zu betrachten, und Sie können sehen, dass es eine Achse gibt, die sie automatisch vertikal gesetzt wird, weil es erkannt wird, dass es eine Ausrichtung. Und wir können den vertikalen Abstand erhöhen, indem wir diesen Abstand Knopf nach oben oder unten drücken, um einen vertikalen Raum zwischen ihren Elementen zu schaffen. Genauso, wo Sie wissen, können Sie die Verteilungs- und Ausrichtungsoptionen in diesen Dropdowns hier ändern . Aber Sie werden hier feststellen, dass es immer noch eine Reihe von roten Ah in unseren, ähm, Einschränkungen gibt, und Sie werden sehen, dass wir Einschränkungen für ein paar verschiedene Dinge vermissen. Darstellung, warum Position für alle Vorgangstitel Textfelder unbekannt ist, da in Wirklichkeit die einzigen Einschränkungen, die sie auf sie haben oder die innerhalb der Höhe diejenigen, die wir hinzugefügt haben. Wir haben unseren Stack noch keine Einschränkungen hinzugefügt, also müssen wir das jetzt tun. Und der einfachste Weg für uns, alles hier zu zensieren, ist, den Stapel horizontal und vertikal neu zu zentrieren . Also, wenn Sie Ihre Stapelansicht von hier aus auswählen, die es hier hervorhebt und Sie gehen zu dieser Schaltfläche hier für das Ausrichten. Was wir tun werden, ist wählen Sie die horizontal im Container und vertikal in Container und fügen diese Einschränkungen hinzu und Sie werden hier sehen, dass es Art von Positionen Diese bewegt ihn ein wenig nach oben und was wir hier tun können, ist versuchen, dies herauszuziehen. Das ist also das wahre Zentrum dieses Bildschirms hier. Und es sieht so aus, als hätte ich ein wenig zu viel vertikalen Abstand zwischen meinem Element. Also werde ich das etwas abnehmen im Attributinspektor hier, versuchen, diesen Look etwas sauberer zu machen. Weißt du, ich denke an die Zwanziger 20. Sollte gut sein. Ähm, also lassen Sie uns einfach, wissen Sie stellen Sie sicher, dass das schön und zentriert ist, und sehen wir hier, ob wir noch mehr von geraden Warnungen S o haben. also lassen Sie uns einfach,wissen Sie, stellen Sie sicher, dass das schön und zentriertist, und sehen wir hier, ob wir noch mehr von geraden Warnungen S o haben. die Schaltfläche kann Clipping-Probleme verursachen . Eso können wir dies hier ändern oder es kann unnötig sein, so dass wir diese Einschränkung entfernen können nur weil Sie hier bemerken, dass die Schaltfläche jetzt genau das mit des Textes darin ist, mit nur der Höhenbeschränkung hier, um, Und wenn wir auf unsere Warnungen zurückblicken, sind sie alle weg. Also haben wir alle unsere Auto-Layout-Constraint-Probleme, die wir auch hatten, um Wir müssen die Navigationsleiste an der Spitze des View-Controllers zu beheben, weil es keine Einschränkungen hinzugefügt . Es ist also genau wie die Navigationsleiste hier in der Hierarchie. Diese ist ein bisschen einfacher, wir können hier auf den Constraints Button für neue Einschränkungen gehen . Und wir werden dieses einfach an die Spitze, nach links oder die führende in der rechten Seite oder die hinteren Kanten anheften und die Verlaufsbeschränkungen direkt dort hinzufügen , und das wird das an Ort und Stelle sperren. Also, jetzt, wenn wir gehen und anfangen, es auf verschiedenen Gerätegrößen zu betrachten, können Sie sehen, dass, wenn ich das iPhone für uns auswähle, wir OK aussehen. Wenn wir gehen, schauen Sie auf dem iPhone S e sieht OK aus, und lassen Sie uns einfach die Dinge auf dem iPhone überprüfen. 10 sehen auch hier gut aus. Sieht in Ordnung aus. Lasst uns nach den Acht suchen. Lassen Sie uns sogar einen Blick auf heute Abend, dass, und um zu sehen, wie das lag es auf dem iPad aussehen würde. Und so ist alles zentriert und das ist genau das, was wir wollen 13. Die IBOutlets und IBActions für die Aufgabe Creator Creator konfigurieren: jetzt, da wir alles positioniert haben, wollen wir voran gehen und anfangen zu verbinden, sind Sie Elemente und implementiert die tatsächliche Entlassung dieses View-Controllers, wenn die Schließen-Schaltfläche getippt wird. Was wir also tun können, ist zu der Aufgabe Ihres Controllers hier zu gehen, und wir behalten alles Seite an Seite mit Storyboard auf der einen Seite und dem Code auf der anderen, und wir fangen an, unsere Kontrollen anzuschließen. Also, wenn wir in den Controller gehen hier, diesen Stack, dass Task-Ersteller von Ihrem Controller, lassen Sie uns mit der Schließen-Schaltfläche beginnen, damit wir voran gehen und haben, dass hier ausgewählt. Und das können wir schaffen. Ich bin Aktion, indem ich die Halten der Steuerungstaste hinzufüge und dann klicke und ziehe über. Und ich werde meine direkt unter Betrachtungslast stellen. Aber von der Steckdose wird der Typ für die Verbindung zur Aktion ändern. Und wir werden diesen Schließknopf einfach angezapft nennen. Und während wir dabei sind, lassen Sie uns weitermachen und beginnen, auch die anderen hinzuzufügen . Wir beginnen mit dem Titel-Textfeld, also machen wir dasselbe. Wilken halten Sie die Strg-Taste gedrückt und ziehen Sie dann über und erstellen Sie eine Verbindung für, um Titel Textfeld. Wir werden das Gleiche für alle unter dem Vorgangstyp-Textfeld und für den endgültigen Text tun. Feld wird auch den gleichen Ansatz Fälligkeitsdatum Textfeld, und dann schließlich wird die zusätzliche Aktion hier erstellen, um die Aufgabe so gut zu erstellen. Steuerung, Schlüssel und Halten, klicken und ziehen Sie über. Und da dies eine Schaltfläche ist, werden wir den Verbindungstyp von Outlet zu Action ändern, und wir werden diese Create-Aufgabe aufrufen, die jetzt beibehalten wird, soweit der Code hier implementiert wird, wahrscheinlich das einfachste Stück, das zu implementieren ist. Nur wir bestreiten, dass alles funktioniert, ist die tatsächliche Schließen-Schaltfläche, die selbst angezapft wird. Eso Was wir hier tun können, ist, wenn die Schließen-Schaltfläche angetippt wird, um tatsächlich aus dem View-Controller zu schließen oder sie zu schließen. Es ist einfach diese Codezeile namens dismiss. Also auf der Schließen-Schaltfläche tippen Methode Will in Smiths eingeben und Sie werden hier sehen, dass die Beschreibung besagt, dass der View-Controller verwirft, der Motor Lee vom View-Controller präsentiert wurde . Also derjenige, der das vorgestellt hätte, war seine do-Liste Tabellenansicht Controller auf Fledermaus wird entlassen, sobald wir diesen Knopf hier tippen. Also alle gesetzt animiert wahr. Und es gibt einen Abschluss-Handler für wenn das Entlassen getan ist, dass es im Grunde ein Rückruf ist, der sagt, dass es seine Rakete abgeschlossen ist. Aber wir werden dort nichts tun, damit wir nil übergeben können, da das ein optionaler Parameter ist. Und jetzt gehen wir weiter und führen Sie das tatsächlich im Simulator aus und sehen, wie es aussieht. Ich werde auf See zu meinem iPhone wechseln und das hier oben anfangen und mal sehen, was wir haben. Also öffnen sich meine Simulatoren jetzt, und ich werde voran gehen und die Plus-Taste drücken, um eine neue Aufgabe zu erstellen. Und Sie können hier sehen, dass mein Menü auftaucht und, ah, wenn ich meine Klamotten habe, aber hier drinnen entlässt der View-Controller, der wieder nach oben geht,kommt sofort zurück. Menü auftaucht und, ah, ah, wenn ich meine Klamotten habe, aber hier drinnen entlässt der View-Controller, der wieder nach oben , Also, jetzt, da wir ablehnen werden Aufgabe Creator View-Controller präsentiert, das nächste, was wir tun wollen, ist die Konfiguration der Textfelder. Eso beginnt mit dem Titel-Textfeld. Wir möchten sicherstellen, dass, wenn wir tatsächlich in das Textfeld klicken oder tippen, dass wir in der Lage sind die simulierte Tastatur oder die Software-Tastatur zu öffnen und dann in der Lage, einige Texte eingeben , drücken Sie die Return-Taste und dann erfolgreich entließ die Tastatur eso, um damit zu beginnen, Was wir hier tun werden, ist in einer Aufgabe Creator View-Controller wird eine neue Funktion hier unten erstellen und wir werden diese private Funk konfigurieren Textfelder nennen. Und wenn die angezeigte Last gut aufgerufen wird, rufen Sie diese Methode auf, um mit der Konfiguration unserer Textfelder zu beginnen. Und was wir hier tun müssen, ist, den Textfelddelegaten zu konfigurieren. Also, wenn Sie sich an den Tabellenansicht-Controller erinnern, äh, für unseren Listen-Tabellenansicht-Controller, gehen wir zurück und werfen einen kurzen Blick auf etwas da drin. Wir kommen rein und überdenken das Konzept der Delegierten und Delegation. Onda implementiert tatsächlich manuell einen Delegierten in nur einem Moment hier. Also, wenn wir hier zurück gehen und wir in den U I Tabelle View-Controller klicken, werden Sie sich erinnern, dass wir au I Tabelle View Delegaten hatten. Jetzt mussten wir nichts tun, da der Tabellenansicht-Controller dies automatisch für uns implementiert . Aber es ist ein Protokoll, und ähnlich, wenn Sie in einen Befehl klicken Sie in Sie, Ich Textfeld und springen zu der Definition hier. Ähm, es hat auch einen Delegierten. Also, wenn wir nach Delegaten suchen, gibt es einen Sie ich Textfeld Delegaten. Und wenn wir einen Blick darauf werfen, was in diesem Protokoll definiert ist, hat es alle Methoden, die als benachrichtigt bezeichnet werden, wenn verschiedene Dinge mit dem Textfeld passiert sind, wie zum mit dem Textfeld passiert sind, Beispiel, wenn die Bearbeitung beginnt, die Bearbeitung endet, wurde die Return-Taste gedrückt, und das gibt uns alle Abschusspunkte, um bestimmte Dinge zu tun, die wir mit unserer Tastatur tun müssen und es zu schließen und was nicht? Um und so, wie wir tatsächlich vorankommen und den Delegierten implementieren, ist ziemlich einfach. Wir werden tun, ist zurück zu unserem Aufgaben-Ersteller von Ihnen Controller hier und innerhalb unserer Konfigurations-Textfeld-Methode . Wir werden mit dem Titel-Textfeld beginnen, und es hat die Punkt-Delegate-Eigenschaft und wird sagen, dass der Delegat für dieses Textfeld gleich sein wird selbst und selbst bedeutet einfach Aufgabe Ersteller-View-Controller. Das ist die Klasse drinnen waren. Was wir also wirklich sagen, ist, dass unser Test-Creator-View-Controller der Delegat für alles für die U I-Textfelder in dieser Klasse sein wird. Jedes Mal, wenn sich Dinge ändern, uh, Textfeld-Interaktionen treten diese Aufgaben oder diese Benachrichtigungen auf oder, ähm, Rückrufe werden an den Task-Creator-View-Controller weitergeleitet, der der agierende Delegaten. Und so wird der Weg die Methoden hier tatsächlich implementieren, weil Sie sehen können, dass ich bereits einen Fehler bekomme, der besagt, dass ich diesen Wert noch nicht zuweisen kann, liegt daran, dass der Task-Creator-View-Controller dem Protokoll entsprechen muss. Sie ich Textdelegierung. Und was wir tun können, ist eine Erweiterung auf Task Creator View Controller erstellen, die dem Protokoll entspricht . Sie ich Textfeld Delegieren und nimmt an, dass ich dies tue. Du wirst sehen, dass dieser Fehler jetzt verschwinden wird. Warum habe ich das in der Erweiterung gemacht? Nun, ich hätte es auch einfach hier oben machen können. Ich hätte Ihnen tun können, ich Textdelegierte, aber hat gute Praxis, vor allem für Swift. Es ist sehr üblich, Ihr Protokoll, Ihre Konformität oder Implementierungen in einer Erweiterung auf was auch immer Sie arbeiten zu wickeln , um die Verantwortlichkeiten getrennt zu halten, damit ich alle U I-Textfelddelegate-Methoden behandeln kann innerhalb dieser Erweiterung. Das ist getrennt von der gesamten Corelogik, die hier im View-Controller vorgeht, indem sie isoliert bleiben und einfach die Dinge modular halten. Und Sie wissen, das ist eine Trennung von Bedenken nur eine gute Praxis für eine schnelle, schnelle Programmierung, und ich weniger so Jetzt müssen wir herausfinden, welche Methoden wir hier implementieren müssen? Denn wieder, wenn wir zurück gehen und einen Blick auf den Textfelddelegaten werfen, ist so ziemlich alles hier drin optional. Was bedeutet, dass wir diese nicht umsetzen müssen schwächen nur mit dem Protokoll übereinstimmen, wie ich es getan habe und nichts tun, wenn wir wollten. Aber auch wenn das sinnlos ist, haben wir die Möglichkeit, eines dieser oder keiner von ihnen zu implementieren, je nachdem, was wir versuchen zu tun. Also die offensichtliche, die wir unbedingt brauchen, ist Text Field sollte zurückkehren, und wir werden hier true zurückgeben und analysieren, was diese Methode tut und warum wir sie auf DSO brauchen . Was hier passiert ist, ist, dass Miss sogar die Dokumentation legte, indem ich diese Methode auswähle, und wenn ich hier auf die rechte Seite gehe, zeigt es manchmal nicht sofort und Ex-Code an. Aber sieh mal, ob ich hier zur Definition davon springen kann, um hier zu springen Teoh. Es heißt also, dass es aufgerufen wird, wenn die Return-Taste gedrückt wird. Gibt Nein zurück, um es zu ignorieren, und es stellt das Textfeld bereit, mit dem interagiert wurde. Wenn ich also auf das Titeltextfeld klicke und die Retur-Taste drücke, wäre dieses Textfeld technisch das Titeltextfeld. Dasselbe für das Fälligkeitsdatum. Gleiches gilt für das Textfeld des Vorgangstyps. Und wenn ich diese Tastatur verwerfen möchte, werde ich nur auf diesem Textfeld sagen, das von dieser Delegate-Methode zur Verfügung gestellt wird. den ersten Responder zurück, und das sagt im Grunde, dass das Element, das gerade im Fokus ist, zurücktritt und es ablehnt , was zu diesem Zeitpunkt die Tastatur wäre. Und die Dokumentation kann es wahrscheinlich besser erklären als ich kann, wo es sagt, dass sie dieses Objekt benachrichtigt, das gebeten wurde, seinen Status als Erstansprecher in seinem Fenster auf DSO aufzugeben . Wenn wir das in einem Simulator ausführen, sehen wir mal,wie das aussehen wird. Wenn wir das in einem Simulator ausführen, sehen wir mal, Also öffnen sich meine Simulatoren hier, ich gehe in den Task-Creator-View-Controller, und ich muss sicherstellen, dass meine Tastatur hier eingeschaltet ist, weil, ähm, okay, sieht so aus, als wäre es. Aber jetzt, wenn ich die Retur-Taste drücke, sehen Sie, wie es abgibt? Also klicke ich in der Tastatur kommt Retur-Taste, um Geschäfte zu machen. Nun, wenn ich dasselbe für die anderen beiden Textfelder versuche, sehen Sie, sehen Sie, es ist nicht, dass es nicht ablehnt. Der Grund, warum es nicht ablehnt, ist, dass ich nur den Delegierten für diesen entworfen habe, was bedeutet, dass der Rückruf, um ihre Rückkehr zu entlassen, dass Sie im Grunde entlassen werden. Die Tastatur wird nicht für die anderen beiden Textfelder ausgelöst, bis ich dem Delegaten auch die gleiche Weise zugewiesen habe, wie ich das Titeltextfeld gemacht habe. Und das ist etwas, was wir hier noch in einer anderen Sache tun müssen . Wenn Sie auf dem Simulator Ihre Tastatur nicht sehen, da dies eine Einstellung ist, müssen Sie auf Hardware gehen, nach Tastatur suchen und sicherstellen, dass Sie Softwaretastatur umschalten, wie meine funktionierte, aber es sollte wurden ah, wir gehen zurück und stellen sicher, dass, um richtig, Okay, Okay, Sie gehen voran und sagten, dass, um sicherzustellen, dass Sie es umschalten können. Nun gehen wir voran und tun das gleiche für die anderen beiden Textfelder und weisen ihre Delegaten zu, so dass wir hier direkt zurück in diese Konfigurationsmethode gehen und das Fälligkeitsdatum gehen können. Textfelddelegat entspricht selbst und Vorgangstyp Textfeld, nicht Delegate gleich selbst. Nun gehen wir weiter und laufen noch einmal im Simulator und sehen, ob wir jetzt die Tastaturen für alle drei dieser Textfelder verwerfen könnten . also in den Create New Task-View-Controller gehe, Wenn ichalso in den Create New Task-View-Controller gehe,kannst du sehen, dass er ablehnt, wenn ich hier zum anderen Textfeld gehe und die Retur-Taste drücke . Es ist nein. Wenn ich hier runter in die 3. 1 den Return Key trage, könnte man sehen, dass es auch ablehnt. Also all diese Luft funktioniert jetzt richtig, weil die Delegierten für jeden von ihnen angeschlossen werden. Werfen wir nun einen Blick auf einige der Attribute eines Sie ein Textfeld, so gehen Sie zurück zum Aufgaben-Ersteller Ihres Controllers und wählen Sie eine Ihre Textfelder und gehen Sie hier zum absoluten Inspektor. Und werfen wir einen Blick auf einige der Eigenschaften, die wir zur Verfügung haben. So zusätzlich zu Text, Farbe und Schriftart, können wir auch ändern, wie die Position des Textes links ausgerichtet Mitte Landry der Löwe gerechtfertigt. Daher möchten wir wahrscheinlich, dass unser Text zentriert wird, nur weil er visuell ansprechender aussehen wird . Ähm, und es gibt auch diese Option hier für Platzhaltertext. Nun, Platzhaltertext ist im Grunde eine Aufforderung, den Benutzer starb, um sie wissen zu lassen, welche Art von Text oder welche Informationen, die in das Feld eingefügt werden sollten. Also ah, gutes Platzhalter-Beispiel hier wäre Geben Sie Task Titel und in der Regel verwendet, um offene Schnittstelle Builder zu zeigen . Ich weiß nicht, warum es nicht mehr ist. Ah, wir werden es sehen, wenn wir es laufen. Aber das tauchte auch hier wieder in den älteren Versionen von X gut auf, äh und ah, lasst uns hören, zurück zu dieser 1. 1 hier. Sie können auch den Rahmenstil ändern, wenn Sie möchten, sodass Sie einen klaren Rahmen haben, wie einen rechteckigen Rahmen mit einem schwarzen Umriss, versenkten Rahmen. Diese Art von sieht aus, als wäre es nach innen versenkt, und dann die Standardeinstellung, die die abgerundete ist, die wir bereits verwendet haben. Es gibt auch viele andere Eigenschaften hier. Ein weiterer interessanter ist der Tastaturtyp, die Standardtastaturen. Was du gesehen hast, wo wir die Buchstaben und Zahlen hatten. Aber Sie können es auch so ändern, dass es nur ein Nummernblock oder ein Telefonpad ist. Ähm, s so ist eine Möglichkeit, dass Sie es innerhalb des Interface Builders einstellen können. Hier ist eine Menge. Viele Optionen, vor allem die Return-Taste. Sie können die Return-Taste auf etwas anderes ändern, wie getan oder als nächstes, oder eine dieser Optionen verfügbar statt nur zurückgegeben. Und es gibt auch eine Tastatur. Sieh mal, da ist ein dunkler, ein heller. Also, ähm, lasst uns versuchen. Lasst uns unsere ändern. Zu dunkel, nur um zu sehen, wie das aussieht. Ähm, auch zwei. Wir möchten wahrscheinlich die anderen beiden Textfelder so einstellen, dass sie den gleichen Stil so bedrohlich haben , dass die Tastatur für die, ähm, mittlere und die Tastatur zu dunkel aussieht ähm, . Suchen Sie nach dunkel für die 3. 1 Auch um eine Anzeige zu haben, der Platzhaltertext für diese. Also ich denke, wir werden wahrscheinlich dio-Task-Typ hier. Also für den Platzhaltertext wird Taskband eingeben und für die 3. 1 hier wird das Fälligkeitsdatum der Aufgabe eingeben Und jetzt gehen wir weiter und führen Sie dies im Simulator aus und sehen, wie es aussieht . Also Simulatoren öffnen hier und ah, ich habe meinen Titel hier und das ist, was die dunkle ah, Tastatur. Und es sieht so aus, als hätte ich vergessen, den Text auf der zweiten und dritten 1 zu zentrieren, aber keine Sorge. Schwächung. Mach das schnell. Sie bemerken hier, dass die Tastatur mit dunklem Design ist, und Sie sehen hier den Platzhaltertext. Und wenn ich beginne, Text wie eine neue Aufgabe einzugeben, verschwindet der Platzhaltertext. Wenn ich meinen Text entferne, kommt der Platzhaltertext zurück. Uh, und ich werde meine anderen reparieren. Sie Textfelder sehr schnell, indem Sie ihre Ausrichtung eingeben. Und jetzt sieht das genauso aus wie die 1. 14. Einführung der UIPickerView: Jetzt müssen wir also die Eingabe des Benutzers aus unseren Textfeldern abschließen und dann eine neue Aufgabe erstellen, um den View-Controller zu schließen und Elemente aus einer Liste auszuwählen. IOS hat nicht wirklich das Konzept eines Dropdown-Menüs, wie Sie wahrscheinlich in Web APS oder sogar einer Android-App gesehen haben . Was wir stattdessen haben, ist die ich wähle Ansicht, und das ermöglicht es einem Benutzer, eine Auswahl in einer Scroll-Kräuterliste zu treffen, anstatt Daten von Grund auf neu eingeben zu müssen , wie sie würden. Jedes weiße Textfeld und das Fälligkeitsdatum-Textfeld in diesem Haustyp werden Sie benötigen. Ich wähle Rezensionen zur Auswahl, also schauen wir uns das Textfeld U I an. In mehr Tiefe, gehen Sie voran und Befehle. Klicken Sie in das Textfeld, um zur Definition zu springen und nach der Eingabe-Ansicht in der U I Textfeldklasse zu suchen. Und dies wird die Ansicht sein, die angezeigt wird, wenn das Textfeld angetippt wird oder in der Responderkette in den Fokus kommt . Und im Wesentlichen wird es eine U I Picker-Ansicht anzeigen, die wir mit unseren Aufgabentypen oder Fälligkeitsdaten konfigurieren werden . Und dann, sobald ein Benutzer eine Auswahl trifft, wird sich daran erinnern, was er ausgewählt hat. Und das werden die Daten sein, die in die Erstellung der neuen Aufgabe gehen. Lassen Sie uns also zurück in unseren View-Controller für den Task-Ersteller gehen und beginnen, diese Einrichtung zu bekommen . Das erste, was wir tun werden, ist, mit der Schaffung einer neuen Immobilie zu beginnen, und wir werden diese private Bar Fälligkeitsdatum oder ein Aufgabentyp-Bild von Ihnen nennen. Es wird ein Typ sein, den ich wähle. Wir werden voran gehen und erklären, dass optional, weil wir es zuerst konfigurieren müssen. Also, was wir hier tun werden, ist innerhalb der Konfigurationstextfeldmethoden, äh, sind in für Ihre Textfelder. Nicht, dass wir voran gehen und das einrichten, so dass wir Task-Typauswahl View tun wird Ihnen gleich. Ich habe ein Foto von Ihnen, um eine neue Instanz davon zu erstellen und was wir als Nächstes tun werden. Da wir mit dem Vorgangstyp beginnen, das Vorgangstyp Textfeld vor Ihnen gleich der Vorgangstypauswahl Ansicht sein. Und jetzt lasst uns ah Befehle Klicken Sie auf dich. Ich wähle, überprüfe und drücke Sprung zur Definition und werfe einen Blick auf diese Klasse und sehe, was es ist. So sofort können wir hier sehen, Blick auf die Vererbungskette, die Sie ich wähle Bewertung ableitet von einem u I Ansicht. Und das ist der Grund, warum wir es als Input von Ihnen zuweisen konnten, weil es letztendlich alle von Ihnen erbt. Ich habe Eigenschaften und in der Vererbungskette hier verwendet. Jetzt, für die ich wähle Überprüfung selbst, hat es seine eigenen Komponenten und Anpassungen hier und wirklich zwei wichtige Dinge, um unseren Delegaten in der Datenquelle zu beachten. Das ist so, wie wir es mit dem U I Textfelddelegaten gemacht haben. Wir werden den Delegaten in der Datenquelle manuell in unserem Task Creator View Controller implementieren eso Lassen Sie uns voran und beginnen, dass jetzt zu arbeiten. Um, also sind wir bereits vorangegangen und weisen hier die Eingabe-Ansicht zu, aber das nächste, was wir tun müssen, ist, den Delegaten in der Datenquelle zu konfigurieren. Also, was wir tun werden, ist ein Task-Textfeld. Es tut mir leid. Task-Typ-Auswahlansicht Starten Delegaten gleich Selbst- und Aufgabentypauswahl Ansicht Datenquelle Gleich , selbst, und wir werden eine Kompilierung Luft ziemlich schnell hier bekommen, weil wir Aufgabe Ersteller von Ihnen nicht angepasst haben Controller für diese Protokolle auf, genau wie wir es hier beim US X Felddelegatengetan haben Felddelegaten . Wir werden genau dasselbe für die Picker-Ansicht tun, also machen wir weiter und erstellen hier eine weitere Erweiterung. Erweiterung auf Aufgabe Ersteller. Sie können schultern, dass es zwei Dinge entspricht, die mit der U I übereinstimmen. Picker View Datenquelle in den U I Picker View Delegate Protokollen und, ah, ah, die obligatorische, die wir implementieren müssen, ist die Datenquelle. Und so lassen Sie uns voran und Befehle. Klicken Sie darauf, springen Sie die Definition und sehen Sie, was wir brauchen, um es in diesem zu tun. Sehen Sie hier, ich wähle Datenquelle Datenquelle Manchmal X-Code bricht, äh, wenn Sie Befehle in die Dinge klicken. Also hat e das Protokoll hier gefunden, und die beiden Dinge, die wir implementieren müssen, die nicht optional sind, sind die Anzahl der Zeilen und die Komponente und die Anzahl der Komponenten. Und das ist also ziemlich einfach, oder? , Selbst hier, wenn Sie nicht sicher sind, was eine Komponente ist, ist es im Grunde eine Spalte mit skalierbaren Daten, und wir werden ziemlich schnell sehen, sobald wir das angeschlossen haben, damit wir jetzt beginnen können . Also lasst uns anfangen, Anzahl der Zeilen Komponente einzugeben, und wir werden einfach Null für den Moment und eine Reihe von Komponenten zurückgeben, die für jetzt gerade werden wir nur eins jetzt drehen, Bisher, Bisher, so gut, dass uns vorbei an der Kompilierfehler, den wir hier gehabt hätten. Aber wir müssen immer noch voran gehen und tatsächlich das Array oder die Datenquelle aufbauen, die in diesem Bild von Ihnen eingespeist wird. Und wenn wir hier wieder nach oben gehen, uh, da dies alle Task-Typen sind, können wir ein privates Array erstellen. Also privat, lassen Sie uns Aufgabentypen, wissen Sie, wir haben nur diese Typen String tatsächlich wissen, was wir tun werden. Aufgabentyp? Nun, den String-Wert zu kaufen. Ähm, und das wird zu gleicher Aufgabe oder Punktcodierung bekommen Urlaubsplanung Punkt Studium in dieser Hausarbeit für all die verschiedenen Aufgabentypen, die wir unterstützen. Und jetzt wird dies unsere Datenquelle sein, die vier Elemente enthält, bei denen die vier verschiedenen Aufgaben für uns zur Verfügung stehen, und wir werden hier tun, gehen Sie zurück in die Anzahl der Zeilen und wir werden die Datenquelle oder die Task-Typ-Bänder, die zählen. Und so sofort hier, das heißt, dass wir vier Elemente haben sollten, sind das Bild von Ihnen weil es vier Elemente in der eigentlichen Datenquelle selbst gibt. Nun, da die Datenquellen angeschlossen sind, lassen Sie uns die Sie tatsächlich erkunden. Ich stelle mir vor, wie Sie delegieren und sehen, was hier drin ist. Also, wenn wir befehlen, klicken Sie darauf und sprang eine Definition, wenn wir nach Ihnen suchen, Ich wählte ihre Ansicht Delegierte. Wir können das Protokoll hier finden, und wir werden feststellen, dass viele Dinge hier Art von Zusammenhang mit der könnte die visuelle Konfiguration des Steuerelements wie die mit für eine Komponente, die Zeilenhöhe für die Komponente, Der Titel für die Zeile, äh, die Ansicht für die Zeile. Und dann, wenn Sie tatsächlich eine Auswahl in einer Reihe getroffen haben, all die Luft, die hier verfügbar ist. Also die, die wir brauchen, haben Zeile und Titel für Straße ausgewählt. Wir werden diese Methoden jetzt umsetzen. Also gehen wir zurück zu unserem View-Controller hier und beginnen, an der zu arbeiten, so dass wir dieses Partikel behandelt haben . Jetzt fangen wir an, dieses Protokoll zu behandeln. Wenn Sie also mit der Eingabe von Titel für Zeile beginnen, erhalten Sie den Titel für die Straßenkomponenten-Methode zurück. Hier Noser eine optionale Stärke zurück. Außerdem, wenn Sie mit der Eingabe beginnen, ausgewählt haben, werden Sie zurück. Er hat Zeile und Komponente ausgewählt, und wir werden das auch implementieren. So wissen wir, wann eine Auswahl getroffen wurde und erhalten das Element vom Benutzer ausgewählt. Was wir hier tun müssen, ist das, was wir gegeben werden? Wurden ein Bild von Ihnen gegeben wurde die tatsächliche Zeile und wurden die eigentliche Komponente gegeben, die in unserem Fall gibt es nur eine Komponente für gerade jetzt. Also wirklich, alles, was wir brauchen, ist die Zeile, um herauszufinden, was sie ausgewählt haben. So können wir sagen, dass die ausgewählte Aufgabe gleich den Aufgabentypen in der ausgewählten Zeile ist. Und was dann? Dio schwächen ist zurück Ausgewählte Aufgabe und ich habe das falsch geschrieben. Beheben Sie, dass der ausgewählte Vorgang den ausgewählten Vorgangspunkt-Rohwert oder den Zeichenfolgenwert von R E newme für den Vorgang zurückgibt . Und jetzt haben wir alles angeschlossen, um zu sehen, wie das aussehen wird. Lassen Sie uns voran und führen Sie dies im Simulator und werfen Sie einen kurzen Blick auf das, was wir bisher haben. Also zurück in der Aufgabe Creator View Controller hier. Wenn ich fortfahre und den Aufgabentyp durch Klicken in ihn auswähle, sehen Sie hier ein Bild von Ihnen. So haben wir jetzt die tatsächlich auswählbaren Aufgaben, die wir durchblättern können, wie Hausarbeit, Studium, Studium, Urlaubsplanung und Programmierung. Äh, und aber es gibt keine Möglichkeit, das jetzt zu entlassen. Unsere Abholung. Er steckt irgendwie fest, denn wenn du dich an die Textfelder erinnerst, könnten wir einfach die Retur-Taste drücken, um sie mit unserer Auswahl von dir zu entlassen. Zumindest im Moment haben wir keine Möglichkeit, aus ihm herauszukommen, weil es nicht nach den gleichen Regeln spielt, die der Textfelddelegat im Textfeld die Methode hier zurückgeben sollte, aber keine Sorgen. Es gibt wirklich zwei Möglichkeiten, wie wir das ganz einfach umgehen können. Und wenn wir zurück zu der gewählten Straßenmethode hier, eine Sache, die wir sagen können, ist, wenn sie eine Auswahl getroffen haben, können wir voran gehen und dieses Bild von Ihnen entlassen. Aber Sie fragen sich vielleicht, wie würden wir das auf der Sicht tun? Es gibt eine Ansicht, keine Bearbeitungsmethode beenden. Und wenn wir fortfahren und einen Blick auf die Dokumentation dafür werfen, indem Sie Befehl klicken und zur Definition springen, wird es verwendet, um die Ansicht oder eine Unteransicht zu erstellen, die der erste Responder zurückgetreten ist. Und das ist wichtig, denn jedes Mal, wenn diese Textfelder ihre Tastatur zeigen, wo sie ihre Eingabeansichten anzeigen, wie es die Auswahlansicht tut, ist dies ein erstes reagierendes Element, auf das es reagiert. Es ist das erste, was auf Benutzereingaben in der Kette von Ersthelfern reagiert, und indem Sie es zum Ende zwingen oder indem Sie Views aufrufen und bearbeiten, die auf true gesetzt wird es automatisch verwerfen, egal welcher Typ ist an diesem Punkt öffnen. Und mal sehen, ob es sogar Yeah gibt, okay, also gibt es von der schnellen Option hier sogar noch ein paar weitere Dokumentation. Diese Methode untersucht die aktuelle Ansicht und deren Missbrauch einer Ansichthierarchie für das Textfeld , das derzeit der erste Responder ist. Wenn er einen findet, fordert es, dass Textfeld seinen ersten Responder zurücktreten, und wenn der Kraftumfang auf true gesetzt wird, wird das Textfeld nie einmal gefragt, zurücktreten gezwungen. Also, jetzt, wenn wir dies ausführen und bevor wir laufen, wird es 11 andere Sache tun, hier wird der ausgewählte Typ an den Task-Typ Textfeld binden. Also, was wir hier tun können, sagen Aufgabentyp Textfeld Punkt Texteigenschaft gleich der ausgewählten oder die Aufgabentypen für die Zeile. Und wir werden den Rob-Wert, der diese Stärke ist, an die tatsächliche Texteigenschaft hier binden . Und so lassen Sie uns das jetzt im Simulator laufen und werfen einen kurzen Blick auf, was es wird dio. Also, hier geht's. Ich habe, um eine Auswahl zu machen, um zu studieren und Sie sehen, dass, sobald die Auswahl getroffen ist, es zeigt sich hier im Textfeld in der Auswahl von Ihnen wird automatisch abgewiesen. Und wenn ich es wieder auf Hausarbeit umschalten, dasselbe zurück zur Codierung ausgewählt und entlassen 15. Die UIDatePicker gestalten: Jetzt sind wir bereit, die letzten Informationen vom Benutzer zu sammeln, und das ist das Fälligkeitsdatum für die Aufgabe. Also, wie wir es mit den USA getan haben, ein Bild von Ihnen wollten einen U I Datumswähler verwenden , der wie eine Sie ich Picker-Ansicht aussieht. Aber ein Großteil der Logik in Bezug auf den Delegierten und das Protokoll wird von Iowa für uns behandelt . Was also anfangen wird, ist das Hinzufügen einer privaten Bar von Do Datum Picker und der Typ wird Sie sein , ich Datum Picker. Und die Art und Weise, wie wir dies konfigurieren, ist sehr ähnlich wie wir den Task-Typ gemacht haben. Wenn wir also in die Methode zum Konfigurieren von Textfeldern hinuntergehen, können wir voran gehen und damit beginnen, das einzurichten. Wir können also sagen, dass die Fälligkeitsdatumsauswahl einer neuen Instanz eines U I-Datumswählers entspricht. Und dann, was wir hier tun werden, ist, einen Blick auf diese Klasse zu werfen und zu sehen, was drin ist . Also Befehl Flick und dann springen Sie zur Definition von Ihnen. Ich Date-Picker und wir können sofort sehen, dass von dieser Klasse es von Ihnen erbt, die ich kontrolliere und und s Codierung. Und Sie, die ich kontrolliere, ist ein weiteres Zwischenglas Zwischen Ihnen, Ich sehe Und Sie, Ich Date-Picker, die mehr Kontrolle oder verwandte Eigenschaften hat. Also, wenn wir zurück eine Ebene hier in die u I Datum Picker, wir bemerkten, dass einige der Eigenschaften haben wir unsere Datum Picker Stimmung Ah, Gebietsschema Kalender Zeitzone das Datum Ah, in ein paar verschiedenen Dinge in Bezug auf minimale Datum Maximum Datum Festlegen des Datums , usw. Sie werden feststellen, dass es keinen Delegierten oder ah-Datenquelle gibt, die wir hier implementieren müssen. Und wie ich am Anfang sagte, behandelt IOS so ziemlich für uns. Eso Es ist eine Art einfach, ein Bild von Ihnen für Daten zu verwenden Jetzt gibt es auch den Datumswähler-Modus . Sie haben Zeitdatum acht und Zeit und Countdown-Timer. Wir werden das Datum für uns benutzen. Also, was wir tun werden, ist zurück zu gehen und zu unserem Datum Fälligkeitsdatumsauswahl, tun Sie Datumsauswahl nicht Date Picker Modus gleich Punktdatum Und sobald wir jetzt haben, gehen wir zu unserem Textfeld, das ist das Fälligkeitsdatum-Textfeld und was wir tun werden , um die Eingabeansicht gleich der Fälligkeitsdatumsauswahl zu signieren. Und wieder der Grund, warum dies funktioniert, ist, dass, wie Sie gerade gesehen haben, die Eingabeansicht Ihre Ansicht ist. Die Fälligkeitsdatumsauswahl erbt von Ihnen, die ich kontrolliere, was von Ihnen erbt, sehe ich. Daher können wir es direkt auf ah View no zuweisen, keine Fragen gestellt. An diesem Punkt , gibt es noch ein bisschen mehr,was wir tun müssen, umdie Auswahl tatsächlich zu , um handhaben. Also noch eine Sache, die ich mir ansehen möchte, ist in dir. Ich kontrolliere Dies erlaubt uns auch, im Grunde Ereignisse hinzuzufügen. So wie wir, ähm, gehandhabt Knopfklicks und das Storyboard trocken sein Aktionen. Wir können auch Schaltflächenklick-Handler problematisch hinzufügen, und das geschieht durch Add Ziel. Und so, da wir in Stan Shading programmgesteuert sind, müssen wir sicherstellen, dass wir den ausgewählten Wert geändert oder den Handler programmgesteuert verbinden. Drei. Füge Ziel hinzu, das von dir kommt. Ich kontrolliere und nicht überraschend, Sie Ich Knopf leitet auch von Ihnen ab. Ich kontrolliere, was ist, wie es in der Lage ist, die Tastenklicks auch durch das at Ziel zu bekommen. Also gehen wir zurück und sehen, wie das aussehen wird zurück und Aufgabe Creator View-Controller . Wir müssen hier tun, ist Fälligkeitsdatum Picker gehen die Linie hier. Fälligkeitswähler Gott hatte Ziel und das Ziel wird sich selbst sein. Ist diese House Creator View-Controller. Also fügen wir dieses Ziel zu dieser Klasse hinzu, und dies wird eine Aktion oder ein Selektor sein. Und das Format dafür wird wie dieser Hashtag-Selektor und der Name der Klasse aussehen , die in diesem Fall als Ersteller, View-Controller beauftragt wird , und dann müssen wir ihm eine Methode geben, die wird angerufen werden. Also habe ich diese Methode noch nicht erstellt, aber wir werden es gut machen. Rufen Sie es an. Wir werden diese neue Methode Datum ausgewählt aufrufen. Weißt du, wir nennen es einfach, ähm, ähm, Date hier und für die u, die ich die Ereignisse kontrolliere. Wir werden Gedankenwert geändert verwenden. Und wenn wir uns das ansehen, aber verpflichtet, auf den hier geänderten Wert zu klicken, wenn ich dort reinkommen könnte, gehen wir zurück zu diesem kompilierten, weil wir diese Methode noch hinzufügen müssen. Also die Methode, die wir hinzufügen müssen, ist Funk Datum ausgewählt Datum Sie I d Picker. Nun, eigentlich nennen Sie das nur, um klar zu sein Datum, Picker-Datum. Aber du bist hier, okay? Und wir werden noch eine Sache tun müssen, damit dies bereit ist, bei O B J c hier hinzuzufügen und mich sehen zu lassen, was diese Luft sagt. Also richtig, hier ist ihre erste Instanz Methodendatum ausgewählt, die nicht der objektiven C-Anzeige bei O B J Causgesetzt B J C um diese Instanzmethode dem Ziel C auszusetzen. Also, wenn wir treffen, fix automatisch Was Sie werden hier sehen, ist es, äh, an O V J C vor die Methode hier setzen und Sie werden sehen, dass diese Warnung verschwindet. Also werde ich befehligen, wirklich schnell zu sein und zu bauen und zu überprüfen, dass alles kompiliert wird. Und ich wollte einen Blick hier auf diesen Wert werfen geändert und mal sehen, ob ich das hier leicht finden kann , um, Suche nach Wert geändert hier. Es gibt also verschiedene Arten von neuen Ereignissen in den U.S.-Kontroll-Ereignissen U.S.-Kontroll-Ereignissen , die hier getroffen wurden. Wir sind daran interessiert, jederzeit zu hören, wenn sich der Wert ändert. Grundsätzlich, wenn der Benutzer ein anderes Datum auswählt, wird dieses Ereignis aufgerufen werden, aber es gibt andere Dinge, die es zu berühren gibt. Abbrechen Berühren Sie außen nach innen, die üblicherweise für Sie verwendet wird. Ich Tasten, berühren, ziehen Sie viele verschiedene Dinge hier, die Sie wollen, um einen Blick auf und sehen, was könnte Sinn für das, was Sie versuchen, dio, wenn Sie programmatische Uh äh tun, Selektoren die Art, wie wir Hat es gerade getan. Also gehen wir zurück. Und jetzt, wo wir alles haben, was angeschlossen ist, aber wir können hier tun, ist drucken Sie Datum Picker bekam Datum und lassen Sie uns gehen und gehen Sie vor und führen Sie diese wirklich schnell im Simulator und überprüfen Sie, dass alles wie erwartet funktioniert. In Ordnung, also lassen Sie uns das beenden und sehen, ob unsere Kontrolle aufkommt und das tut. Sie können sehen, dass es drei Komponenten hat. Es hat einen Monat. Es hat einen Tag und es hat ein Jahr. Also, wenn wir wählen, sagen wir, April jetzt werden Sie feststellen, dass die Datumsmethode ausgewählt, die wir programmgesteuert über diese Anzeigenzielmethode hier hinzugefügt haben , nur aufgerufen wurde, weil der Wert geändert Ereignis ausgelöst wurde. Also, wenn wir jetzt das Datum Picker Dot Datum hier ausdrucken, mal sehen, was wir haben und es sieht aus wie für 18 2018 jetzt, das ist in Ordnung. Ich möchte dieses Format nicht wirklich unnötig verwenden. Was wir also tun können, ist ein Datum für Materie zu verwenden, um das Datum zu formatieren, das in ein Format zurückkommt , das ein bisschen hübscher aussieht. Und dann haben wir das mit dem Textfeld kombiniert. Also für die Formatierung, das Datum, das Format, von dem ich denke, das hier am einfachsten zu verwenden ist, wird diese Art von Format-Großbuchstaben sein . Mm, dd Warum? Warum? Warum? Warum? Das wird also für den Monat stehen, den Tag und dann das 44-Zahlenjahr. Die Art und Weise, wie wir uns an dem Datum anpassen, das zurückkommt, besteht darin, ein Datum für Materie zu verwenden. Also werden wir einfach Flett Date für Materie gleich Datum vor Materie tun. Und dann setzen wir das Format auf diese Zeichenfolge. Ich habe gerade den Kommentar eingegeben. Also Datum für Materie Punkt acht Format, das Nein gleich ist, nur verwenden Sie dies genau so, wie es ist, weil es das richtige Format ist, dass die Zeichenfolge dort ist. Und dann, was wir tun werden, ist formatiertes Datum gleich Datum für Materie Punkt String von Tag und das Datum, das zurückkommen wird, ist von der Datumsauswahl hier. Es übergibt sich also im Grunde selbst in der Methode hier zurück, weil es geändert wurde. Also Datumswähler. Nicht das. Nein, nein, nein. Kein Datum Auswahl Punktdatum. Und an diesem Punkt werden wir diesen String-Wert tatsächlich an das Fälligkeitsdatum-Textfeld binden. So Fälligkeitsdatum, Textfeld bekam Text gleich formatiert Datum. Und was wir tun werden, ist, nachdem wir es an das Textfeld gebunden haben, wird die Eingabeansichten verwerfen . Wird Ansicht zu tun hat Ende. Die Bearbeitung ist auf true gesetzt, genau wie wir es bei der Auswahl einer Aufgabe getan haben. Nun, lassen Sie uns dies im Simulator ausführen auf, sehen, wie es aussieht. Also geh in das Textfeld, äh, Fälligkeitsdatum hier, und lass uns voran gehen und ein anderes Datum auswählen. Also geh in das Textfeld, äh, äh, Fälligkeitsdatum hier, Ich versuche den 18. Juni und sieh mir das an. Also Augen Ihre sechs für den Monat 18 für das Datum oder den Tag und dann 2018 für das Jahr. Lassen Sie uns versuchen, etwas anderes auszuwählen, das versuchen wird. Vielleicht am 18. September. Lasst uns vielleicht das Jahr 2020 aufstocken. Vielleicht stürzen Sie das Datum auf. Ein paar Tage. 22. Es sieht so aus, als ob dort alles funktioniert. Wenn du zurück gehst und das andere Feld hier ausprobierst, ausprobierst, funktioniert das auch wie erwartet. Äh, stellen Sie sicher, dass meine simulierten Tastaturen hier funktionieren, Softwaretastatur und, ähm, Trip. Und sicher genug, alles funktioniert einwandfrei. 16. Die Benutzererfahrung verbessern: Nun, bevor wir bereit sind, die Aufgabe zu erstellen, gibt es ein paar Dinge, die wir verbessern möchten. Sie bemerken sofort, die mit dem Titel Enclosed Button sind wirklich nah an der Statusleiste hier, bis zu dem Punkt, wo es optisch unansprechend aussieht. Das ist also etwas, das wir auf jeden Fall ansprechen wollen. Und zusätzlich dazu, äh, was, wenn ein Benutzer versehentlich eine, ähm, Picker-Ansicht eine Tastatur oder eine Datumsauswahl öffnet ähm, , aber keine Auswahl von dort treffen möchte und keine Möglichkeit hat, die eigentliche -Feld ? Es gibt keinen Schließknopf. Es gibt keine Möglichkeit, aus ihm herauszukommen, ohne tatsächlich eine Auswahl im tatsächlichen Bild von dir zu treffen . Und das wollen wir auch verbessern. Beginnen wir also mit der Navigationsleiste und sehen, was wir dort tun können. Der Standardraum war also in der Regel die Höhen der Statusleisten 2020 Pixel. Was wir also tun würden, ist unsere Navigationsleiste, die wir jetzt haben, zu nehmen und sie um 20 Pixel dort runter zu bringen. Also, wenn wir zurück in die Hauptstory Board gehen, können wir jetzt anfangen, daran zu arbeiten. Und wenn wir in den Task-Creator-View-Controller gehen und wir hier zu den Ergebnis-Auto-Layout-Problemen gehen, können wir mir Clear Constraints auswählen, während wir die Navigationsleiste ausgewählt haben, so dass es nur die Einschränkungen für die -Navigationsleiste. Und sobald wir das getan haben, waren frei, um die Navigationsleiste zu bewegen. Und was ich hier tun werde, ist in dieses kleine Lineal-Symbol hier oben für den Größen-Inspektor zu gehen , und ich werde anfangen, mich zu bewegen. Die Y-Achse wird beim Vergrößern der Y-Achse tatsächlich das Steuerelement oder das Element, das Sie manipuliert haben, nach unten verschoben. Also wollen wir das um 20 runterschieben. Und wenn wir das dort um ah haben, wie es 20 war. Aber wir können tun, ist gehen Sie voran und fügen Sie einige Einschränkungen zurück, um es in dieser Position zu beheben, auf dem einfachsten Weg, dies würde in die völlig out-Schaltfläche gehen hier, und wir fügen eine obere Einschränkung, eine rechte oder nachfolgende Einschränkung, eine linke oder führende Einschränkung und ah, lassen Sie uns eine Höhe von 44 dort machen und ah, wir werden das in die Position bringen, also lassen Sie uns das jetzt im Simulator ausführen und sehen, wie es aussieht , wie es so ist. Es sieht definitiv besser aus, aber wir können dies tatsächlich verbessern und es noch einen Schritt weiter gehen. Wir können tatsächlich die genaue Navigationsleiste replizieren, die ein Navigationscontroller standardmäßig innerhalb unseres Modellansicht-Controllers verwendet , der nicht innerhalb des Navigationsstacks vorhanden ist. Und um dies zu tun, müssen wir tatsächlich verwenden die Navigationsleiste Delegaten sind eine Navigationsleiste und verwenden Sie eine der Delegaten Methoden, um dieses Aussehen zu erreichen. Was also schwächen Dio ist, öffnet der Assistenzredakteur hier. Also haben wir unser Storyboard geöffnet und unseren Code auf einer Seite. Und wenn wir zu unserem Task Creator View-Controller gehen, was wir tun, ist die Navigationsleiste auszuwählen und eine Navy Steckdose zu ihm zu erstellen. Halten Sie also die Steuerungstaste, klicken Sie und ziehen Sie über in den View-Controller, und wir werden nur diese Navigationsleiste aufrufen kann die Verbindung zu erstellen. Und dann, was wir hier tun werden, ist, da wir den Delegaten tatsächlich verwenden werden, indem Sie ihn zuweisen , und wenn Sie es taten, führt führt Navigationsleiste Punkt Delegate tun, was eine U. N.-Navigationist U. N.-Navigation bar Delegaten gleich self. Jetzt werden Sie feststellen, dass wir hier ziemlich schnell einen Kompilierungsfehler erhalten werden, da der Test-Creator-View-Controller noch nicht diesem Protokoll entspricht, weil wir es gerade hinzugefügt haben. Also genau so, wie wir es für die Picker-Ansicht und den Textfelddelegaten getan haben. Wir werden es für den Delegierten der Navigationsleiste tun. Also werden wir das tun, indem wir eine Erweiterung erstellen. Sie sind beauftragt Creator View-Controller, die Ihnen entspricht, ich Navigationsleiste Delegieren und die Methode, die wir wollen, wollen wir von hier aus verwenden. Wenn Sie beginnen, das Wort Position vier Balken eingeben, die die, ähm, Balkenposition zurückgibt ähm, , werden wir oben angehängt zurückkehren. Nun, lassen Sie uns das noch einmal im Simulator ausführen und sehen, ob das irgendeine Art von Verbesserung in Bezug auf Positionierung unserer Navigationsleiste bewirkt hat. Sie geben also zu, dass die Navigationsleiste hier jetzt ganz ähnlich wie Navigationscontroller oben angehängt ist. Navigationsleiste ist eso. Es sieht aus, als wäre es immer noch im gleichen Stil, obwohl es ein Motiv ist. Wir präsentierten View-Controller, so dass es irgendwie funktioniert, und es sieht viel besser aus als das, was wir zuvor hatten, um einen der Tastaturtypen zuschließen und es sieht viel besser aus als das, was wir zuvor hatten, um einen der Tastaturtypen zu , die vorgestellt werden. Es wäre toll, wenn wir eine Möglichkeit hätten zu erkennen, ob Benutzer außerhalb der Tastatur getippt hatte. Und in der Tat gibt es einen Weg, dies zu tun. Und wir können eine „U I Tap“ -Geste benutzen. Erkennen er, um ein Tippen auf eine bestimmte Sie Elemente in diesem Fall zu erkennen, möchten wir, dass tippen Sie auf die Ansicht Controller-Ansicht, um zu bestimmen, wann es getippt wurde und dann alles, was geöffnet sein könnte, zu schließen. Was wir hier tun können, ist eine neue Methode zu erstellen. Ähm, privater Funk konfigurieren, tippen Sie auf Geste, erkennen Sie er und wir können das im Blick nennen. Wurde geladen, nachdem wir die Textfelder konfigurieren aufgerufen haben. So konfigurieren Sie tippen Geste Erkennen er und wird eine neue, äh, Geste erstellen äh, . Erkenne sie so. Also lassen Sie einige tippen Geste erkennen er gleich, dass Sie ich tippen Geste. Erkennen Sie er und die Initialize wird verwenden Hier ist das Ziel und die Aktion, genau wie wir es vorher für die U I Datumsauswahl getan haben. Wir werden dasselbe wieder tun, programmatisch äh, programmatisch äh, indem wir im Grunde einen Tap-Handler hinzufügen. Klicken Sie auf Candler Also wird das Ziel in diesem Fall selbst für den tatsächlichen Aufgabenersteller Ihres Controllers sein und der Selektor wird die Methode sein, die aufgerufen wird, wenn der Tap ausgewählt wird . Nun, in diesem Fall habe ich diese Methode noch nicht geschrieben, aber ich werde anfangen, indem ich den Selektor ausschreibe. Und es wird der Task Creator View-Controller sein, ähm Punkt erkannt hat? Ja, und dann genau hier, alle kreativen Funktionen. Äh, öffnen Sie es, wo wir das andere haben. Funk hat Tap erkannt und mal sehen, ob wir jetzt bekommen wird wahrscheinlich beschweren. Hier, lass mich sehen, ob Ah, noch nicht. Wir müssen bei o b j C aussetzen weil ich sagte, dass diese Methode tatsächlich in Ziel C so verwendet werden kann, wie sie in Swift initialisiert wird . Lassen Sie mich wenigstens überprüfen, ob das da ist. Also OK, hat erkannt App ist da. Und, ähm, wenn wir in der Geste vorbeigehen wollten, erkennen Sie? , Äh,wenn ein Weg, wie wir das tun könnten, ist, ähm, ihn so zu erkennen. Und dann, wenn wir hier runter gehen, gehen wir weiter und stellen sicher, dass das aufbaut und es tut. Das ist also eine Sache, die Sie tun können, wenn Sie diesen Parameter übergeben. Sie übergeben im Grunde, äh, die Kontrolle, mit der in diesem Fall interagiert wurde, die erkennt. Also, wenn wir eine bestimmte Eigenschaften auf dem Erkennen benötigen oder wir könnten es so übergeben oder wir hätten einfach verlassen können, ist es eine leere Funktion. Es spielte keine Rolle im Fall des ausgewählten Datums, als wir die Datumsauswahl benötigten, um Thea die Uhrzeit oder das Datum zu erhalten, das ausgewählt wurde. Eso, das ist nur 11 Weg, das zu tun. Eso, wir sind hier noch nicht fertig. Wir müssen es noch hinzufügen. Also view, was die Ansicht Controller von Ihnen ist, fügen Sie keine Geste hinzu Erkennen Sie die Tippgeste erkennen er selbst. Also, jetzt hören wir für Hähne und auf die tatsächliche Erkennung eines Tippen wir hier tun wird Ansicht Got Ende Bearbeitung sagte, dass True, Lassen Sie uns voran und testen, dass im Simulator und sehen, wie es sich abspielt. Ordnung, also innerhalb des neuen Task-Controllers erstellen, Mal sehen wir hier, damit wir unser Bild von Ihnen heraufbringen können. Und wenn ich außerhalb der Tippgesten erkannt tippe und wir schließen die Tastatur, indem wir Endbearbeitung aufrufen und versuchen wir es am Fälligkeitsdatum. Schwächen Sie das Geschäft von dort aus. Versuchen wir es auf der Tastatur für den Titel. Wenn Sie es von dort abweisen, lassen Sie uns versuchen, hier etwas zu tippen und abzulehnen. Wir können immer noch unsere regelmäßige Auswahl treffen, weil wir es normalerweise tun würden. Umreifung ein Datum, Vielleicht schließen wir es wieder, aber wir wollten es nicht öffnen, und wir wollen keine Auswahl treffen. Also wir einfach schnell draußen und das deckt alle unsere Anwendungsfälle hier ab. An diesem Punkt erlebt unser Benutzer so viel verbessert, und wir sind bereit, die Aufgabe zu erstellen und diese zurück an den To do List Tabellen-View-Controller zu übergeben und der Liste hinzugefügt. 17. Erstellen der TODO: So sind wir jetzt auch und bereit, die Aufgabe tatsächlich zu erstellen. Ähm, was wir hier tun wollen, ist in die Erstellen-Aufgabe tippen hier, und hier werden wir alle Eingaben nehmen, die der Benutzer generiert hat, und die Aufgabe auf diesem View-Controller automatisch erstellen . Also, um zu beginnen, wollen wir ein paar Vernunft Checks machen. Wir wollen sicherstellen, dass wir alle Attribute erhalten und keine Probleme haben. Das erste, was wir überprüfen möchten, ist, den Task-Titel zu erhalten, den der Benutzer eingelegt hat, so dass wir eine Überprüfung für den Task-Titel durchführen können. Wir werden eine let Aufgabe Titel gleich Aufgabe tun, ihr Titel Textfeld Punkttext und wir können hier tun, ist Wache. Lassen Sie es ehlz zurückkehren, und wir werden nur drucken fehlgeschlagen, um erforderliche Attribute zu erhalten. Wenn wir also voran gehen und uns daran erinnern, eine neue Aufgabe zu erstellen, müssen wir einen Titel, ein Fälligkeitsdatum und einen tatsächlichen Aufgabentyp angeben. Zusätzlich zu all dem, was wir auch tun können, müssen wir nach den beiden anderen Attributen suchen, die wir jetzt brauchen, zusätzlich zu dem Aufgabentitel, den wir nach dem Fälligkeitsdatum und dem Aufgabentyp suchen müssen. Aber auch nur nach Neuem zu suchen ist nicht genug. Ah, Benutzer könnte auch nicht in irgendeinem Text hinzufügen, obwohl das Textattribut möglicherweise nicht null ist, Es gibt möglicherweise keine Zeichen im Textfeld, also müssen wir unsere Prüfung erweitern, um auch dieses Szenario zu berücksichtigen. Und wir können das ganz einfach tun, indem wir unsere Guard-Anweisung um einen Task-Titel erweitern größer als Null zählt, , dergrößer als Null zählt, was im Grunde sagt, dass es Zeichen in diesem Titel-Textfeld hier sein muss, bevor wir es Ballad auf betrachten. Und wenn Sie mit der Guard-Anweisung nicht vertraut sind, ist es im Grunde so, als ob etwas nicht gleich Nil Check ist, aber es kann explizit verwendet werden, weil Wache sehr viel für Heu steht. Etwas könnte hier schief gehen, achten Sie darauf und lassen Sie uns ein Programm verwenden oder wissen, dass es einige Fälle gibt, nach denen Sie suchen müssen . Und Sie wissen, dass dieser Fall hier im Grunde äquivalent ist, wenn, wissen Sie, Titeltextfeld aus Text ist nicht gleich null und Aufgabe betitelt, dass die Anzahl größer als Null ist , außer in einer Wächter Let's Style Syntax, so dass wir erweitern Sie dies für die anderen Felder auf genau die gleiche Weise. Und wenn wir hier vor dem anderen ein Komma hatten, können wir das auch tun. Ähm, lassen Sie den Task-Typ. Text ist gleich Aufgabentyp, Text, Feld, Text und Aufgabentyp. Textanzahl ist größer als Null in unserem endgültigen Fall für diese Überprüfung wird Fälligkeitsdatum gelassen werden . Text entspricht Fälligkeitsdatum, Textfeld Punkttext und Fälligkeitsdatum Textkonto erstellt in Null. Und das deckt uns ab, so dass wir sicherstellen, dass wir gültigen Text für alle unsere Felder haben, anstatt nur zu drucken, wenn etwas schief geht. Wäre es nicht schön, wenn wir eine Art Ära Banner oder eine Warnung sehen? Es ist ziemlich einfach, dies zu tun. Und wir können das mit einem so genannten U I-Alert-Controller tun , der im Grunde eine kleine Pop-up-Nachricht mit einem Titel und etwas Text und einer Schaltfläche anzeigt, so dass wir eine neue Funktion für diesen privaten Funk-Anzeigefehler und Fehlertitelzeichenfolge konfigurieren können Fehlermeldung Stamm, und wir erstellen eine neue Instanz eines Sie entweder. - Troller. Lassen Sie uns Ah, Fehler Alert Controller gleich au High Alert Controller. Und für die anfängliche Isar wird den Titel der Nachricht in Stil verwenden. Wir werden im Irrtum übergeben, Titel Ära Nachricht und für den Titel des Stils. Ich meine, wir benutzen die Alarmbereitschaft. Es gibt auch ein Aktionsblatt, aber das ist für diese Art von Fehlermeldung nicht relevant. Damit werden wir für den Titel und die Nachricht konfiguriert. Aber wir müssen auch in der Schaltfläche OK hinzufügen, wo die Schaltfläche, um die Alert-Ansicht oder den Alert-Controller zu schließen . So können wir das tun, indem wir eine u I Alarmaktion erstellen. Also lasst uns, ähm okay, Action ist dir gleich. Ich warnt Aktion für die anfängliche Isar für den Titelstil und den Handler, und für den Text wurde in Ordnung für den Stil gebracht. Ich werde, ähm,den Verzug setzen ähm, . Und für den Handler ist dies nur, ah, ah, die Schließung des Callbacks für, wenn auf die Schaltfläche geklickt wird. Wenn Sie irgendeine Logik tun müssen, obwohl sie optional ist, werde ich sie tatsächlich implementieren, nur damit Sie sehen können, wie es aussieht. Also, Prince, der richtige Button Handler wurde angerufen. Und sobald wir das erstellt haben, müssen wir das nur dem Alert-Controller hinzufügen. Ich dachte, Werbeaktion. Fügst du das okay hinzu, Aktion. Und schließlich müssen wir den Alert-Controller präsentieren. Gleiche Art und Weise hätten wir Modellansicht-Controller. So nennen wir nur den vorliegenden Fehler Alert Controller Animated True. Fertigstellungshandler, Nil. Uns ist es egal, was passiert, und lass uns weitermachen und das laufen, aber lass es uns mit Bad in laufen lassen. Aber lassen Sie uns das, äh das unglückliche Bad testen . Wir möchten also, dass einige oder alle unsere Felder leer sind, damit wir sehen können, dass unsere Alert-Kontrolle aufgerufen wird. Also gehe ich hierher, rufe einfach an, erstelle eine Aufgabe mit nichts darin. Sie können sehen, ich bekomme die Nachricht auch an Wenn Sie auf die Protokolle hinunter schauen, können Sie sehen, dass der richtige Handler aufgerufen wurde. Das bedeutet also, dass das einen Rückruf bekommt. Äh, zivile. Also, zum Beispiel, wenn ich hier eintippe und nur den Treffer erstellen, okay, wir werden sehen, dass okay, dieser Bremspunkt getroffen wird, weil der Ah-Handler-Verschluss genau hier erreicht wird . Also, ähm, also wissen wir, dass das funktioniert. Ähm, und jetzt sind wir gut, mit weiterzumachen, tatsächlich unsere Aufgabe auszubauen, also haben wir jetzt den Titel, den Typ und den Fälligkeitstext. Jetzt müssen wir den Typ und das Datum von diesen erstellen, so dass wir als nächstes tun müssen. Beginnend mit dem Datum wird ein, um let Datum für Materie erstellt Equals vor Materie getan Und lassen Sie, um, es ist Fälligkeitsdatum gleich Datum für Materie Startdatum von String, die die Zeichenfolge Fälligkeitsdatum Text sein wird, und Sie werden Beachten Sie, dass dies zurückgibt und hier optional ist. Also müssen wir auch einen Scheck dafür machen, damit wir das tun können, Wache, Wache, lass den Kerl es gleich sein, dass sonst zurückkehren. Aber bevor wir zurückkehren, können wir auch einen weiteren Fehler anzeigen. Und das könnte ein Szenario sein, in dem der Benutzer den Text im Textfeld in etwas anderes änderte . Und es ist kein Validierungsverfahren mehr. Also haben wir, ähm, ungültiges Datum. Es gab ein Problem mit dem Datum und ah, letzte Überprüfung zu tun ist für die Aufgabe. Lassen Sie uns also sicherstellen, dass unsere Let-Aufgabe Aufgabe gleich ist. Es tut mir Leid. Task-Typ entspricht Aufgabentyp von rohem Wert der Stärke, und diese Zeichenfolge wird der Aufgabentyp Text sein, und es gibt auch eine optionale, Also wir sind auch ich muss für diese Nos Turn überprüfen, und wir werden einfach die Dieselbe Sache hier. Zeigen Sie einen weiteren Fehler an, wenn ein Problem in der Balad-Task aufgetreten ist. Okay, es gibt ein Problem mit dem Frag-Typ, und wenn all das erfolgreich ist, dann sind wir gut zu gehen. Lassen Sie mich also Aufgabe gleich Aufgabe für den Testtitel hier oben, das Fälligkeitsdatum von hier und den Aufgabentyp von hier aus. Und an diesem Punkt können wir dismiss aufrufen, was uns zurück zum, um Listen-Tabellenansicht-Controller führt. Also werden wir animierte True Completion für Nein aufrufen, bevor wir das ausführen. Sie auch sicher, dass wir nach dem Datumsformat suchen, das wir unten festgelegt haben. Also, wenn Sie sich hier für den Monat, Monat, Tag, Tag,Jahr erinnern Monat, Tag, Tag, , möchten wir das gleiche Format verwenden. Also kopieren wir das einfach und stellen Sie in unserem Check sicher, dass das Format das gleiche ist. Ah, und jetzt lasst uns das laufen und herumspielen und sehen, ob wir eine neue Aufgabe erstellen und überprüfen können , dass in gültigen Fällen geschützt werden. Jetzt sagen wir einfach, um das Auto zu waschen. Sagen wir einfach, es ist Hausarbeit und sagen wir, ich muss es bis morgen tun. Aber sagen wir, ich ändere, äh, Hausarbeit in einen Aufgabentyp, der nicht existiert, wie die Autoarbeit. Und dann traf ich. Aufgabe erstellen. Sie sehen, dass ein ungültiger Aufgabentyp aufgetreten ist, da ein Problem mit dem Aufgabentyp aufgetreten ist. Ich konnte nicht Sie konnten keinen Fall dafür erstellen, weil es nicht einer unserer unterstützten Typen , ähm, in der Enumeration. Also, wenn wir das wieder zur Hausarbeit bringen, machen Sie das jetzt sagen wir, wir brechen das Datum. Um, indem Sie ein ungültiges Datum in das Löschen von erstellen eingegeben haben, gab es ein Problem mit dem Datum. Ok, cool. Das scheint also zu fangen. Und sagen wir, wir haben alles andere, aber aus irgendeinem Grund haben wir beschlossen, Teoh den Titel komplett wegzulassen. Es erstellen Aufgabe, fehlende erforderliche Attribute. Also sind wir hier bei den Sachen vor ziemlich gut geschützt. Ein bisschen seltsam. Und jetzt, äh, endlich waschen Sie das Auto, was jetzt unser gültiger Fall ist. Lass uns weitermachen und es erschaffen. Und sicher genug, haben wir die neue Aufgabe erstellt und wir haben den View-Controller geschlossen Jetzt haben wir ein Problem. Wie kommen wir zu der neuen Aufgabe, von wo aus sie sich im Task-Ersteller Ihres Controllers befand, zurück zum Listen-Tabellenansicht-Controller und noch wichtiger ist, dass sie automatisch zur Tabellenansicht hinzugefügt wurde. Das ist etwas, was wir in diesem Moment noch nicht tun können. Und das ist etwas, das wir lösen werden, indem wir unser eigenes Protokoll implementieren. Das wird unser Delegierter sein, und unser Delegierter wird benachrichtigt, wenn eine neue Aufgabe erstellt wurde und in der Lage sein , diese neue Aufgabe automatisch zu unserem Tabellenansicht-Controller hinzuzufügen . 18. Einführung in die Protokolle und Delegation: In unserem letzten Video standen wir vor dem Dilemma, wie wir die neue Aufgabe tatsächlich wieder an unsere To do List Tabelle Ihres Controllers übergeben . Und obwohl es ein paar Möglichkeiten gibt, dies zu tun und nicht unbedingt eine bestimmte rote Antwort , dies ist ein wirklich guter Punkt, um über Partikel und das Delegierungsdesignmuster zu sprechen . Also lassen Sie uns loslegen, indem Sie ein schnelles Beispiel in einem Spielplatz erstellen. Nur können wir den Punkt in Isolation illustrieren und dann dieses Konzept nehmen und es auf unsere App anwenden . In meinem schnellen Spielplatz hier habe ich eine sehr grundlegende Klasse erstellt, und dies ist eine Klasse, die nur Haustier genannt wird, mit einer Eigenschaft, einem Namen, einer anfänglichen Isar, die diesen Namen zuweist. Und dieses Haustier könnte alles sein. Es könnte ein Hund sein. Ein Vogel könnte eine Katze sein. Es könnte etwas Exotischeres sein, vielleicht sogar eine Schlange. Ein Protokoll ist also im Grunde ein Blueprint, ein Blueprint der Funktionalität. Wenn wir also einen Hund für Verhaltensweisen definieren wollten, die zum Hund gehören würden, könnten wir ein Protokoll namens Dog erstellen. Wir könnten sagen, dass dieses Protokoll einen Funktionspark hat... und vielleicht hat dieses Teilchen eine bestimmte Rasse für den Hund. Also vielleicht eine Bar, äh, Rasse vom Typ String. Und auf einer sehr grundlegenden Ebene bedeutet dies, dass jede Klasse, die dem Hundeprotokoll entspricht, eine Rasse haben muss, und sie muss die Fähigkeit haben, zu bellen. Nehmen wir an, zum Beispiel, wir machen Haustier konform mit Hund, so dass wir das auf folgende Weise tun können. Wir könnten es tun. Die diese Art der Syntax hier. Und wenn wir Haustier mit Hund konform machen, werden Sie sehen, dass wir sofort eine Ära bekommen, die nicht mit diesem Protokoll Hund übereinstimmt . Und wenn Sie auf die Fehlermeldung klicken, wird gefragt, ob wir Protokollstubs hinzufügen möchten. Und wenn wir schlagen, repariere, was passieren wird. Werden X-Codes automatisch in der Rasse für eine Eigenschaft und eine Funktion namens Bark hinzugefügt? Und es tut das, weil es weiß, dass es das ist, was wir im Protokoll genau hier definiert haben . Und so müssen wir dieses Verhalten haben, weil das Protokoll verlangt, dass wir diotieren, damit wir so etwas wie Druck machen können . Zum Beispiel, um Name bellte laut. Wir können auch in einer Rasse injizieren hier für die Art, die mit diesem Hund gehört, so dass wir selbst dot Rasse gleich tun könnten Rasse, und es garantiert eine Art, um sicherzustellen, dass diese Klasse geht Toe haben bestimmte Dinge, die wir spezifizieren hier. Also, wenn wir in den fehlenden Parameter für die Rasse hinzufügen und sagen wir, Fluffy ist ein Mops jetzt, wenn ich hier tun kann, anstatt dass ich Haustier sagen kann, nicht stattdessen arbeiten und wir werden sehen, dass Lieben laut und flauschig gebellt. Es ist ein Lese oder ein Mops, der laut Teil, so dass das Problem ein wenig mehr Sinn im Kontext hier. Und so können wir eine Klasse mit einem Protokoll auf andere Weise durch Erweiterungen konform machen . Also haben wir das so ziemlich die ganze Zeit gemacht. Wie Sie mit dem U I-Tabellenansicht-Delegaten und der Datenquelle gesehen haben,können Sie die Ich-Picker-Ansichtsdelegate in der Datenquelle auswählen. Wie Sie mit dem U I-Tabellenansicht-Delegaten und der Datenquelle gesehen haben, Wir haben all diese durch Erweiterungen implementiert. Jetzt, wo wir Protokolle verstehen, schalten wir die Gänge und sprechen über das Delegationsdesign Pulver. In den einfachsten Worten ist Delegation im Grunde ein Muster, bei dem ein Objektor, eine Sache Verantwortlichkeiten an eine andere Entität, Klasse oder Sache delegieren kann , die in ihrem Namen handeln wird. Jetzt ist es am besten durch ein Beispiel illustriert, und ich denke, es wird ziemlich deutlich Sinn machen, wenn ich Ihnen dieses Stück Code hier zeige. Nehmen wir an, zum Beispiel, dass wir eine Klasse namens Haustierbesitzer oder Baby haben. Rufen wir einen Hundebesitzer an, was? Jetzt ist es Haustierbesitzer und lassen Sie uns eine andere politische namens Hund Delegate erstellen. Und sagen wir, dieses Protokoll hat eine Funktion. Der Hund hat gebellt. Und so hat unser Haustierbesitzer ein Haustier. Und sagen wir einfach, dass unsere eigentliche Het hier und in diesem Fall einfach davon ausgehen wird, dass es Ah ist , Hund, ähm, hat einen Delegierten. Also lassen Sie uns var Delegaten vom Typ Dog Delegate als optionales tun, das gerade erst begonnen hat. Und mach dir keine Sorgen, wenn das ein wenig verwirrend ist, alles macht Sinn, wenn alles zusammen ist. Also unser Haustierbesitzer, sagen wir einfach, er hat einen Namen , der der Typ String ist. Nehmen wir an, er hat ein Haustier und wir initialisieren ihn mit einem Namen und einem echten Haustier. So weit, so gut. Was wir hier tun können, ist eigentlich in Stanciute, unserem Besitzer. Also lasst uns das hier machen. Das werden wir sagen. Lassen Sie schneiden Besitzer gleich Haustierbesitzer. Ihr Name wird Jim sein. Und das wird das Haustier sein, das wir gerade oben erstellt haben, das ist unser Mops. Und wir werden unseren Haustiernamen ändern. Teoh. Nennen Sie einfach. Es ist ein Käfer. Und so, So weit so gut. Also haben wir das hier aufgestellt. , Erinnern Sie sich daran,dass wir diese Delegierteneigenschaft hier eingestellt haben, und was wir sagen können, ist, dass unser Haustierbesitzer dem Hundedelegierten entspricht, was bedeutet, dass Haustierbesitzer der Delegierte ist oder im Namen seines Haustieres handelt, während Doc in diesem Fall. Also, was wir tun können, ist eine andere Ausdehnung zu schaffen, die wir Erweiterung erstellen können. Und das ist genau die Art, wie wir es für Sie getan haben. Ich wähle Sie Delegieren in der Datenquelle, Tabellenansichtsdelegaten in der Datenquelle aus. So Erweiterung auf Haustierbesitzer, die Hundedelegaten entspricht. Und jetzt, wenn wir hier sitzen lassen, bekommen wir einen Kompilierfehler, der besagt, dass Hey, wir nicht dem Protokoll entsprechen. Wir müssen die Methode Hund zu implementieren tat Mark. Also fangen wir an, Hund zu tippen, hat nicht gebellt. Jetzt ist unser Delegierter der Haustierbesitzer. Kann reagieren und etwas dagegen tun. Vielleicht hat er das benachrichtigt. Hey, ich muss meinen Hund jederzeit füttern, der Hund bellt. Also, wie rufen wir das auf? Und für mich hier brauchen wir eigentlich ein Schild der Delegierten. Also, wenn unser Haustierbesitzer dem Protokoll entspricht und was wir sagen können, Haustier-Punkt-Delegat entspricht sich selbst. Und der Grund, warum wir sagen können, ist, weil sich selbst bezieht, weil es innerhalb des Tierbesitzers ist. Klassisch bezieht sich auf Haustierbesitzer. Und weil diese Erweiterung des Tierbesitzers dem Hundedelegierten entspricht, ist das der Grund, warum wir es sich selbst zuweisen können. Was bedeutet, wenn wir diese Eigenschaft hier gesetzt haben, sind wir in die Delegatenkette eingesteckt. Wir hören auf alle Benachrichtigungen oder Ereignisse, die Hund möglicherweise ausstoßen. Nun, um das aufzurufen, müssen wir tatsächlich aus der Gesundheitsklasse oder dem Hundeprotokoll. Wir müssen weitermachen und unseren Delegierten informieren, der in diesem Fall unser Delegierter Haustierbesitzer ist. Das ist etwas passiert. Also in diesem Fall, wenn Bark nach einer Prinzaussage aufgerufen wird, können wir sagen, Delegierte Dot hat ihr Hund nicht bellen und wird hier passieren, nachdem wir vorangegangen sind und unsere Beziehungen hier festgelegt haben . Wenn wir sagen, Mops Dot Bark, sehen wir uns die Konsole hier unten anmeldet. So sehen wir hier Fluffy ist ein Mops, der laut bellte, was diese Druckaussage ist. Ich wurde gefeuert und dann wird der Delegierte benachrichtigt. Wenn diese Delegierten benachrichtigt, wessen Haustierbesitzer es hier in dieser Anweisung kommt, wird ausgeführt. Ich muss meinen Hund füttern. So jetzt ist der Tierbesitzer bewusst, dass etwas passiert ist und der Besitzer etwas dagegen zu tun hat. Und wir können dieses Konzept für genau die gleiche Situation für unsere neue Aufgabe verwenden und unseren Table View-Controller informieren , dass es nicht Ihre Aufgabe gibt, und wir müssen etwas dagegen tun , um zusammenzufassen, dass der Grund, warum wir Protokolle für Delegaten ist, weil sie der Blueprint sind, der das Verhalten in diesem Fall definiert hat, muss Hund nicht bellen von jedem Delegaten implementiert werden, der dem Dog Delegate Protokoll entspricht . Nun, für unsere App sind unsere To-Do-Liste. Tabellen-View-Controller wird der Delegat für den Task Creator View-Controller . Jedes Mal, wenn wir eine neue Aufgabe erstellen, wird unser Aufgaben-Ersteller alle Delegierten darüber informieren, dass er eine Aufgabe erstellt hat. Und unsere Delegierten werden in diesem Fall nur die To-Do-Liste sein. Tabellenansicht-Controller wird benachrichtigt, dass eine neue Aufgabe erstellt wurde. Wir können diese neue Aufgabe als Parameter innerhalb der Methode übergeben und sie dann der Tabellenansicht hinzufügen , während wir die Entlassung unserer tatsächlichen zu tun Liste tun. Unsere Aufgabe. Schöpfer Ihres Controllers. Nun, nehmen wir das, was wir hier über Vertikale und Delegierte gelernt haben, gehen wir weiter und implementieren unseren eigenen Delegierten und binden das tatsächlich an, damit wir die neue Aufgabe zu unserem Tisch von Ihnen hinzufügen können . 19. Den eigenen Delegierten erstellen: jetzt, unter dem, was wir aus dem vorherigen Tutorial gelernt haben, können wir unsere eigene Aufgabe Creator Delegieren machen. Gehen Sie also an den Anfang der Aufgabe Creator View Controller zurück im Hauptprojekt, in dem wir gearbeitet haben . Wir werden ein neues Protokoll direkt über unserer Klasse erstellen. Das Protokoll wird Task Creator genannt, Delegate. Und im Moment werden wir nur eine Methode hinzufügen. Funk hat eine neue Aufgabe erstellt und wird die neue Aufgabe als Parameter für die Methodensignatur bereitstellen . Und wir werden diese Aufgabe einfach hier nennen. Also das ist alles, was Partikel haben werden? Es ist wirklich einfach. Eine Methode. Nicht viel. Teoh. Ja, Konformiert. Also, jetzt, wieder in Aufgabe Creator View-Controller, Wir müssen eine beliebige Eigenschaft erstellen, die Delegate-Eigenschaft. Also machen wir einen var Delegaten vom Typ Task Creator, Delegate, und Sie werden dies optional machen wollen, weil Ihr Task Creator View-Controller möglicherweise keinen Delegaten hat. Eine andere Klasse hat sich möglicherweise nicht als Delegat für diesen View-Controller zugewiesen. Wir wollen also nicht versuchen, einen Delegaten aufzurufen, der nicht existiert. Indem wir es also optional machen, wenn wir es aufrufen und niemand diesen Delegaten abonniert hat, werden wir keinen Laufzeitabsturz bekommen. Jetzt müssen wir also herausfinden, wo wir diesen Stellvertreter tatsächlich anrufen, oder wann informieren wir , wer auf der anderen Seite zuhört, dass eine neue Aufgabe erstellt wurde? Nun, der logische Ort, um dies zu tun, wäre innerhalb der Erstellungsaufgaben-getappten Methode hier. Sobald wir tatsächlich auf die neue Aufgabenerstellung gekommen sind. Genau hier, bevor wir unsere Entlassung machen, können wir das einfach tun. Delegate Stock hat eine neue Aufgabe erstellt und die neue Aufgabe einfach so übergeben. Und wieder, während dies hier optional ist, wenn sich niemand der Delegierte zugewiesen hat, dann ist das in Ordnung. Das wird einfach vorbeigehen. Wir werden nicht wie erwartet in unserer Apfelarbeit abstürzen. Gehen wir nun zurück in die Aufgabenliste des Tabellenansichts-Controllers und stellen Sie sicher, dass er der Delegat für den Task-Ersteller wird. Also in unserer To-do-Liste hier, ähm, ähm,wollen wir wahrscheinlich dio diese statische Datenquelle loswerden, die wir hier definieren, weil denken Sie daran, dass wir harte Beschichtung verwendet wurden, äh, im Moment. Aber wir werden diese jetzt dynamisch machen, indem wir unsere eigenen erstellen, damit wir das Konstrukt eine Datenquelle für jetzt auskommentieren können , oder entfernen Sie es, was auch immer Sie tun möchten. Wenn Sie den Befehl Schrägstrich ausführen, können Sie hier einen Block markieren und in einem Go auskommentieren . Ich möchte auch im Blick kommentieren. Hat geladen, wo wir es nennen, und sobald wir das getan haben, müssen wir hier tun, ist dieser Kerl zu machen, um Listen-Tabellenansicht zu tun, Controller-Klasse entspricht diesem Protokoll. Und so, wie wir es im vorherigen Tutorial getan haben, können wir eine Erweiterung auf einem Listen-Tabellenansicht-Controller erstellen. Das entspricht dem Aufgabenersteller, Delegate. Und Sie möchten vielleicht einen Befehl tun, um Ihr Projekt hier zu erstellen, weil Mexiko manchmal Probleme hat, das zu finden, und sobald es es gefunden hat, und sobald es es gefunden hat,werden wir dieses implementieren. Nicht, dass wir angerufen haben, haben neue Aufgabe erstellt. Und sobald diese neue Aufgabe erstellt wurde, werden wir hier darüber benachrichtigt werden, und dann können wir etwas damit machen, was in unserem Fall hier zu unserer Datenquelle hinzufügt und dann unsere Tabelle neu lädt -Ansicht. Ähm, aber wir sind noch nicht fertig. Wir haben die Zuweisung nicht gemacht, im Grunde zuweisen, diesen Tabellenansicht-Controller zu tun, um der Delegat zu werden. Nun, wenn Sie sich erinnern, wie wir zum Test-Schöpfer gekommen sind, wenn wir zurück zum Haupt-Story-Board gehen, wenn wir tatsächlich den Plus-Button Ah drücken, im Tabellenansicht-Controller, der automatisch in die neue Aufgabe eingewogen . Also genau hier, wenn wir das hier drücken, segway wir hierher. Nun, die gute Nachricht ist in unserer To-Do-Liste. Tabellenansicht-Controller sind für Segway vorbereitet. Methode wird benachrichtigt werden, genau wenn das passiert, und Sie können genau die gleiche Weise sehen, wie wir versucht haben das Segways-Ziel herauszufinden, um herauszufinden, was Sie kontrollieren oder wir gehen Teoh, Wir können den gleichen Ansatz verwenden hier und herauszufinden, ob wir zum Aufgabenersteller gehen und ob wir voran gehen und die Delegierten selbst zugewiesen werden, bevor diese Methode beendet wird. Und das ist genau das, was wir in Dio gehen. Also bereiten Sie sich auf Segway vor. Wir müssen uns bewusst sein, wohin wir diesen Code setzen. Denn wenn wir uns diese Wache ansehen, werden wir eine Menge von uns hierher zurückkehren, wenn bestimmte Dinge nicht passieren. Also, zum Beispiel, wenn wir versuchen, eine u I Tabelle View-Zelle zu erwarten, wenn wir zum Detail von Ihnen gehen wollten, aber wir haben es nicht bekommen, dann kehrten wir zurück. Das Gleiche, wenn wir keinen Indexpfad oder einen detaillierten View-Controller bekommen könnten. Also wollen wir unseren Code hier nicht wirklich unten setzen, weil er scheitert, wenn wir nicht wirklich gehen. Teoh der Detailansicht-Controller. Also, wenn wir es oben oben oben stellen, hier ist unser erster Scheck. Was wir sagen können, ist, wenn der Task-Ersteller-View-Controller dem Segway-Ziel entspricht, das ist, dass Sie Ihren Controller haben, können wir das als Task-Creator-View-Controller umwandeln. Wenn das also, wenn das Check erfolgreich ist, dann können wir einfach sagen, der Task-Creator-View-Controller, ich dachte, Delegat ist gleich Selbst und Selbst die zu tun-Listentabelle, die Sie Controller haben, weil wir Protokoll genau hier und dann, was in diesem Fall passieren wird, ist es wird weiter unten durch diese Wache, Lassen Sie überprüfen und dann zurückkehren, weil es nicht eine Tabelle von Ihnen verkaufen. Also werden wir dort keine Probleme haben. Wir machen den Auftrag nicht wirklich, und dann können wir das tun. Hier ist, wenn dies benachrichtigt wird. Also schwächen Fußabdruck-Aussage hier drin. Drucken einer neuen Aufgabe erkannt. Wir können es zu unserer Datenquelle hinzufügen. Also, wenn Sie sich erinnern, hier sind Datenquellen, eine Reihe von Aufgaben, und wir haben es einfach auf den Kopf gestellt. Wir haben es am Anfang dieses Tutorials hart überzogen, aber jetzt können wir es direkt von hier aus aufrüsten. So Datenquelle, die Aufgabe anhängen. Und wenn wir eine Tabellenansicht neu laden Daten aufrufen, nachdem wir Upended, wird es automatisch jede Zeile neu laden. Also lassen Sie uns das im Simulator testen und sehen, wie es aussieht. Unser an unserem leeren Listen-Tabellenansicht-Controller zu tun. Wir haben das hartcodierte Zeug da drin entfernt. Wenn wir also zum Plus-Symbol hier gehen, um eine neue Aufgabe zu erstellen, rufen wir einfach dieses rufen wir einfach dieses Programmier-Tutorial auf, Programmier-Tutorial auf, und es sieht so aus, als ob meine simulierten Tastaturen nicht auftauchen. Was ich hier tun kann, ist auf Hardware zu gehen, während ich den Simulator auf einer Tastatur ausgewählt habe und die Softwaretastatur tuggle. Und sobald wir den Aufgabentyp erreicht haben, wollte ich die Auswahlcodierung beenden und ich werde sagen, dass das Fälligkeitsdatum morgen ist und ein Gnome und gehen vor und erstellen Sie diese Aufgabe und schauen Sie sich das an. Wenn Sie also hier im Protokoll nach unten schauen, wurde die neue Aufgabe erkannt und wir haben diese Aufgabe hochgefahren, was bedeutet, dass diese zurückgerufen wurde und wir die Daten für die Tabelle von Ihnen erneut geladen haben. Und lassen Sie uns noch einen weiteren machen und ich werfe hier sogar einen Bruchpunkt, damit Sie ihn Schritt für Schritt sehen können . Nehmen wir an, wir wollen bei einer zweiten Aufgabe reingehen. Also, ähm, sagen wir einfach Ah, Reinigung oder Dokument, da wir eine Art Hausarbeit haben. Also Hausarbeit und wir werden sagen, das wird am 22. der Merch machen, die es kreiert und zusieht. Also Boom, unser Delegierter, der getan wird , um Listen-Tabellenansicht-Controller zu tun, wird sofort benachrichtigt. Die neue Aufgabe ist bestanden. Wir sind darauf angewiesen. Laden Sie die Daten und Walla Jetzt Wir haben zwei Aufgaben. Und wenn wir ins Detail von Ihnen gehen wollten, für eine von ihnen sind alt. Code funktioniert immer noch genau so, wie wir es können. Wir können jeden von ihnen angreifen. jedoch Wir haben dasjedochnoch nicht implementiert, also wird es nichts zeigen. Ähm, aber alles funktioniert immer noch. Und jetzt, ähm, jetzt, da wir das dynamisch arbeiten, wird der nächste Schritt in diesem Tutorial die Implementierung des detaillierten View-Controllers sein, wenn wir eine Aufgabe hinzufügen, dann eine Auswahl treffen -Aufgabe. Wir wollen das hier und ziemlich oben auf der Benutzeroberfläche anzeigen, weil es im Moment ziemlich leer ist. 20. Den Controller zur Detailansicht gestalten: Jetzt bleibt alles, was übrig ist, den Detailansicht-Controller zu stylen und ihn hübsch aussehen zu lassen und die Daten anzuzeigen, die wir aus der To-Do-Listen-Tabelle übergeben, wenn Sie Controller, die die ausgewählte Aufgabe ist. Also, wenn wir hier wieder in unseren detaillierten View-Controller gehen, werden Sie sehen, dass alles, was wir haben, ist die Aufgabe, die wir übergeben. Und dann haben wir in dir ausgedruckt. Also müssen wir zurück zu unserem Storyboard gehen und beginnen, einige zusätzliche U-Elemente zu konfigurieren. Wenn wir zurück zum Storyboard gehen und unseren detaillierten View-Controller hier betrachten, ist es ziemlich unfruchtbar. Also lassen Sie uns voran und beginnen, einige Schnittstellenelemente hier hinzuzufügen. Aber wir können tun, ist auf die Objektbibliothek unten gehen, rechts, rechts, und wir können einige Beschriftungen hinzufügen, um mit beginnen. Also suchen wir nach dir. Ich beschrifte, dass wir hier einen auf den View-Controller ziehen können, und lassen Sie uns einfach versuchen, die innerhalb der Höhe zu erhöhen und diesem eine gute Position zu geben. Wir können irgendwie von der Mitte des View-Controllers aus beginnen, dann erarbeiten, wie wir müssen und was wir hier tun können, ist der Text zentrieren und, äh, wir geben diesem etwas mehr Platz kann an die Ränder gezogen werden. Geben Sie ihm einfach maximalen Platz und diese kleinen blauen gepunkteten Linien. Oder legen Sie Richtlinien fest, die Ihnen die sicheren Bereiche sagen, in denen Sie Ihre Elemente positionieren können Lassen Sie uns voran gehen und beginnen Sie mit diesem für den Titel. Was wir hier tun werden, ist den Assistenten Editor zu öffnen. Ja. Ich meine, ziehen Sie das hier rüber, der Mann wird den Diesel-View-Controller auf einer Seite öffnen. Und was wir tun werden, ist, einige Verbindungen zu erstellen. Also verbinden wir uns über das Etikett, und dieses wird als unsere Titeletiketten dienen. Dies wird also diese Aufgabe Titelbezeichnung genannt. Sie verbinden es und lassen Sie uns weitermachen und ein paar mehr erstellen. Ich bin also, was ich hier tun werde, ist, dieses Etikett zu kopieren. Wenn Sie den Befehl ausführen, sehen Sie nach Kopie oder wählen Sie einfach das Etikett auf do edit copy, Sie können das gleiche Ergebnis erzielen, und Befehl V der ist nicht Victor. Wir könnten es einfügen. Da sind noch zwei. Eine für den Typ und eine für das Fälligkeitsdatum. Und so lasst uns hier voran gehen und versuchen, sie aufzustellen. Also lasst uns gehen und die etwas nach oben bewegen. Und wir können alle Etiketten auf einmal auswählen, indem Sie einfach die Umschalttaste gedrückt halten jeweils für die Mehrfachauswahl klicken. Und wir können die nach oben ziehen und versuchen, so etwas in der Mitte zu bekommen. Jetzt werden Sie hier bemerken, dass ich das als iPhone acht betrachte. Jetzt müssen wir hier vorsichtig sein, denn unser Titel könnte lang sein. Es könnte groß sein, Ähm, und wir müssen sicherstellen, dass das auf einer kleineren Bildschirmgröße gut aussehen wird. Bevor wir also tatsächlich irgendwelche Einschränkungen verbinden, lassen Sie uns einige Schriftarten für diese Beschriftungen festlegen. Wir beginnen mit dem Titel und wählen ihn aus. Sie gehen zum Attributinspektor hier auf der rechten Seite, und wir ändern die Schriftart in etwas anderes. Ich werde Dio in Avenue oder Spaß, also denke ich, Avenir als nächstes wird den Stil zu fett ändern, und lasst uns eine Art größer machen. So sticht es hervor. Äh, denke, 32 ist wahrscheinlich groß genug und für den anderen für den Typ in den Fälligkeitsdaten. Wir gehen weiter und setzen die, ähm Teoh Avenir als Nächstes, aber eine andere, die wir nicht fett benutzen werden, werden wir benutzen. Ich denke, Medium wird wahrscheinlich gut aussehen und wir werden voran gehen und das nach oben stoßen. Ich denke, Teoh 26 sieht ziemlich gut aus. Wir machen dasselbe für das Fälligkeitsdatum, das das dritte Label hier ist. Also die Allee nächste mittlere Größe 26 und lassen Sie uns das hier tun. Okay, das sieht bisher ziemlich gut aus. Und jetzt, da wir das haben, versuchen wir, die Auto-Layout-Einschränkungen tatsächlich hinzuzufügen, um diese an den entsprechenden Positionen zu fixieren . Also, wenn wir mit unserem Titellabel beginnen und wir gehen voran und wählen es, wenn wir hier runter gehen, können wir sehen, dass es 146 von der oberen 16 auf der linken Seite und 16 von der rechten Seite und 37 nach unten ist. Nehmen wir an, wir wollen einen bestimmten Abstand zwischen den Beschriftungen darunter beibehalten. Offensichtlich könnten wir eine Stapelansicht verwenden, wie wir zuvor im Eingabe-Creator-View-Controller verwendet haben, aber eine andere Sache, die wir hier tun können, ist eine Art von Bewegung um unsere Labels, die irgendwie nahe beieinander kommen . Und wir können dann sehen, wenn wir vertikale Änderungen vornehmen, dass das, was 37 war, jetzt acht Pixel oder acht Pixel entfernt von dem, wo sich das Titellabel befindet. Also, wenn ich die ein bisschen mehr nach unten bewegen will, sagen wir, uh 123456789 10 und halten einen Platz von 18 weg. Ich kann das hier und auch tun Wenn ich meine Aufgabentypbezeichnung auswähle, sehe ich, dass es auch acht Pixel vom Fälligkeitsdatum entfernt hat. Wenn ich also diesen gleichen Abstand beibehalten möchte, kann ich das Fälligkeitsdatum auswählen. Erhöhen Sie die y-Achse mehr, wodurch sie nach unten gedrückt wird. Ich könnte das mit einem Wert von 10 tun und dann kann ich zurückgehen und überprüfen, dass der Typ das sehen könnte. Okay, es ist um 17 Uhr, also muss ich noch einen aufstoßen, und ich könnte den Abstand von 18 zwischen allen aufrechterhalten. Sobald wir das getan haben, können wir jeden von ihnen erneut auswählen, und wir können sie alle zusammenziehen und wirklich nach diesem Zentrum suchen. Die Layout-Anleitung zeigt Ihnen, wo es ISS an dieser Stelle. Was wir dann tun können, ist mit allen ausgewählten, wir können mehrere Einschränkungen gleichzeitig haben. Nehmen wir also an, wir wollen eine führende und die nachfolgende Einschränkung hinzufügen, so dass 16 weg von jeder Layout-Richtlinie, Lassen Sie uns voran und sagen, Wir wollen die Höhe auf 55 für jede von ihnen zu fixieren. Gehen wir und fügen Sie dies hinzu, um zu sehen, was passiert. Also fast bekommen wir hier ein Problem, weil es noch einige Informationen gibt. Das automatische Layout muss verstehen, wo diese positioniert werden sollen. Und wenn wir uns die tatsächlichen Luftmaßnahmen ansehen, die wir bekommen, brauchen wir eine Einschränkung für die Y-Position. Also, was wir im Grunde tun wollen, ist zu versuchen, zu sagen, Hey, Auto-Layout. Wir wollen einen Arzt, jede dieser Etiketten, genau dort, wo sie sich an ihrer Y-Achse genau hier in diesem speziellen View-Controller befinden. Also, wenn wir fortfahren und alle gleichzeitig auswählen, und dann gehen wir hier runter auf die Schaltfläche für eine Zeile, was wir hier tun können, ist vertikal im Container abchecken, aber gehen Sie nicht voran und treffen Sie gerade noch. Hier sehen Sie, dass der aktuelle Wert auf Null gesetzt ist Wenn er auf Null gesetzt ist, wird alles vertikal im toten Zentrum positioniert , da dies hier die Nullachse für diese Ansicht sein wird. Controller an. Wir wollen das nicht tun, denn was passiert, wenn ich es tue? Das wollen wir nicht. Das ist unerwünscht. Also wollte ich Command Z treffen oder einfach bearbeiten, ähm, rückgängig machen und ich werde dir zeigen, was wir dafür hinzufügen müssen... Also wollen wir Dio wirklich tun was wir getan haben, aber gut hier. Vertikal ausschalten. Aber gehen Sie zu diesem Dropdown und verwenden Sie den aktuellen Canvas-Wert. Mit diesem Sprichwort ist, nehmen Sie die weiße Position für jede dieser Sie ich beschriftet und das wird sein, wo es vertikal positioniert ist, dann hatte die drei Einschränkungen hinzugefügt und Sie können sehen, dass sie bleiben, wo sie sind Jetzt alle unsere Warnungen verschwinden, weil sie korrekt positioniert sind. Jetzt ist der wichtige Tag. Also im Moment tun wir immer noch das ist ein iPhone Acht. Nehmen wir an, wir gehen auf die kleinste Gerätegröße, die das iPhone vier s ist, und lassen Sie uns dann arbeiten. Schauen Sie sich unseren Titel an und gehen wir zum eigentlichen Inspektor hier und fügen Sie einen unserer längeren Titel hinzu. Und wenn Sie sich an den Standardtitel für einen erinnern, hatten wir eine Reise nach Spanien geplant. , Siehst du, das ist ein Problem. , Unser Text wird abgeschnitten,weil der Gedanke zu groß für das mit des Geräts ist. jetzt Wenn wirjetztzu einem iPhone 8 zurückkehren, ist das kein Problem. Wir haben genug Bildschirm-Immobilien, um das jetzt zu bewältigen. Glücklicherweise gibt es eine einfache Lösung dafür, und was wir hier tun können, ist, wenn Sie das Etikett „Schwächen“ ausgewählt haben, gehen Sie unter die automatische Verkleinerung direkt hier und sehen, wie es eine feste Schriftgröße festlegt. Wir können das auf eine minimale Gedankenskala oder eine minimale Schriftgröße ändern, also werde ich die minimale Schriftgröße auswählen und Sie werden hier sehen, dass es auf einen Standardwert von 16 gesetzt ist und plötzlich unser Label jetzt in ein iPhone für s. Nun, wenn wir wieder auf ein Plus stoßen. Es geht zurück auf die höhere Schriftgröße auf 32. Und wenn es jetzt gut ist, nehmen wir an, wir gehen auf ein iPad und werfen einfach einen Blick dorthin und Sie könnten sehen, dass wir immer noch die maximale Größe verwenden, die wir als 32 definiert haben. Und wir sind tot in der senkrecht auf dem Bildschirm, wo wir es wollten. Damit wir diese lustige Größe sogar noch ein bisschen mehr aufstoßen können. Vielleicht, Ah, 35. Und wir werden wieder auf das iPhone für S springen und Sie können sehen, dass es den Gedanke immer noch entsprechend für die Gerätegröße skaliert , was großartig ist. Jetzt sind wir bereit, die letzten beiden Etiketten für den Aufgabentyp im Fälligkeitsdatum und bevor wir die Verkaufsstellen handeln. Eine Sache, die wir sicherstellen müssen, ist, wieder in unsere Aufgabe zu gehen. Und wenn Sie sich erinnern, hatten wir anfangs alle diese Privaten starten, so dass keine andere Klasse auf sie zugreifen konnte . Das brauchte keinen Zugriff auf diese Eigenschaften. Nun, jetzt brauchen wir Zugriff auf sie, weil wir sie an die Schnittstelle binden. Also müssen wir das Fälligkeitsdatum von privat zu intern ändern, so dass wir einfach privat und intern ist der Standardzugriffsmodifikator löschen können, und jetzt werden wir in der Lage sein, darauf zuzugreifen, um diese Bindung zu machen. Sobald Sie das getan haben, gehen wir zurück zum Detailansicht-Controller hier und beginnen unsere Outlets für die anderen beiden Labels zu erstellen . Also gehe ich Teoh, geh weiter und kontrolliere einfach. Klicken Sie auf und es wird das Task-Typ-Label sein, und ich werde auch aussehen, als ob ich diese Verbindung gelöscht habe. Lassen Sie mich das hier auf den Testtitel zurücksetzen und dann auch für das Fälligkeitsdatum tun. Und jetzt haben wir all diese Verbindungen an Ort und Stelle. Lassen Sie uns voran und erstellen Sie eine neue Funktion, private Funk konfigurieren Schnittstelle, und was wir hier tun können, ist anstelle dieser, wenn Aufgabe gleich Aufgabe, wir werden einfach voran gehen und schneiden, dass. Für den Moment. Wir werden Configure User Interface on View nennen. Hat innerhalb der Methode geladen wird, dass, wenn lassen Jack hier, und der Grund, warum wir tun, dass Jack ist, weil Aufgabe optional ist. Wir möchten sicherstellen, dass wir tatsächlich eine Aufgabe haben, bevor wir alle Arten von Operationen ausführen , die möglicherweise bindend sein könnten, keine Werte und einen Absturz des Ausführungstyps verursachen. Nun, da wir unsere Aufgabe erfolgreich verfolgt und ausgepackt haben Nun, ,gehen wir weiter und fangen an, sie anzuschließen. , Also, beginnend mit dem Titel, könnten wir Aufgabe Titelebene tun. Got text entspricht dem Task-Punkttitel. In ähnlicher Weise können wir die Aufgabentypbeschriftung tun, dass Text Personen der Aufgabe Punkttyp Punkt für alle Wert gebracht Wert ist, weil es ein e newme ist. Das ist ein String-Typ in den falschen Werten, die Zeichenfolgendarstellung dieser Enumeration. Und schließlich für die Aufgabe Fälligkeitsdatum Bezeichnung. Wir werden ein Datum für die Angelegenheit verwenden, denn wenn Sie sich an Task-Punkt erinnern, muss ich den Befehl drücken , um hier zu sein, weil wir diese Änderung kompilieren müssen, die wir vorgenommen haben, damit das Datum intern ist. Also, wenn ich den Task-Punkt mache, können Sie sehen, dass das Fälligkeitsdatum auftaucht und es ist ein Typdatum, also ist es kein String-Wert, also müssen wir es konvertieren, damit wir ein Datum für die Angelegenheit machen. Lassen Sie Datum für Materie gleich einem Datum für Materie, und wir werden dieses Datumsformat ein Format auf das gleiche Format, das wir aus dem Eingabe-Task Creator verwendet und setzen wenige Controller. Das war also ein Großbuchstabe M m Kleinbuchstaben D D und Kleinbuchstaben. Warum? Warum, warum ? Und schließlich, was wir hier tun können, ist die Aufgabe. Fälligkeitsdatumsbeschriftung, nicht Text entspricht dem Datum für Themenzeichenfolge ab Datum. Der Tag wird verstrichen ist das Fälligkeitsdatum der Aufgabe. Bevor wir alles ausführen, lassen Sie uns eine letzte Sache reparieren. Bevor wir alles ausführen, Der Hinweis hier, dass der Detailansicht-Controller und das Storyboard eine blaue Zurück-Taste hat, und es passt nicht wirklich mit dem Thema unserer schwarzen auf gelben Art von Stil. Wenn Sie sich erinnern, wenn Sie sich erinnern,kommt diese Navigationsleiste vom Navigationscontroller, weil sie vererbt wird, weil sie in diese Hierarchie eingebettet ist. Wenn Sie sich erinnern, Sie sich erinnern, wenn Sie sich erinnern, kommt diese Navigationsleiste vom Navigationscontroller, weil sie vererbt wird, weil Eine schnelle Lösung dafür ist, dass wir tatsächlich ein globales Zelt auf der Navigationsleiste setzen können, um tatsächlich eine andere Farbe zu haben. Also, wenn Sie gehen und wählen Sie Ihren Navigationscontroller und Sie gehen in hier und wählen Sie die Navigationsleiste, die wir tun können, ist gehen Sie in den Attributinspektor der Bar, gehen Sie unter Wort, sagt Ansicht hier. Suchen Sie nach Zelt beabsichtigen, auf diese blaue hier zu setzen ist ein Standard, aber wir können das in eine andere Farbe ändern. Wir können es zum Beispiel in Schwarz ändern . Und wenn wir das laufen, wird es ein schwarzer Rückknopf sein. Auch bevor wir es ausführen. Lassen Sie uns noch eine Sache im Detailansicht-Controller testen. Es gibt eine Eigenschaft namens Titel und wenn Sie hier lesen, ist es ein lokales s, während das für die Ansicht darstellt, die dieser Controller verwaltet. Wenn wir das einstellen, lassen Sie uns einfach dio-Task Detail. Nun, tatsächlich, wenn man die Navigationsleiste sieht, erscheint der eigentliche Titel hier in der Mitte, so dass wir diesem Ah, etwas mehr von, ah, Informationen geben können etwas mehr von, ah, ah, , bis zu welchem Bildschirm Wir sind dran. Und wir wollen eine letzte Änderung vornehmen. Gehen Sie zurück zur To-Do-Liste des Tabellenansichts-Controllers und nur damit wir dies schnell testen können , werden wir voran gehen und uns kommentieren, Datenquellenmethode dekonstruieren, nur um die statischen Aufgaben zurückzulegen, die wir erstellt hatten. Und jetzt lassen Sie uns gehen und laufen dieses Gasthaus ein iPhone SG, die eine kleinere Bildschirmgröße, nur um zu überprüfen, dass alles aussieht und verhält, wie wir erwartet. Teoh. Also lassen Sie uns voran gehen und klicken Sie auf eine der längeren wie Planung Trip to Span und Sie können hier sehen, dass zurück Button ist schwarz. Die Aufgabe des Detailtitels zeigt sich hier in der Mitte unserer Navigationsleiste, und wir konnten unsere Textplanung Reise nach Spanien sehen. Es sieht gut aus. Es ist nicht abgeschnitten. Gehen wir nochmal zu diesem. Sieht ziemlich gut aus. Und jetzt wollen wir versuchen, einen zu erstellen. Rufen Sie einfach diese neue Aufgabe an und ich wollte sicherstellen, dass meine Tastatur hier umgeschaltet ist. werden wir in die Studie in der Kategorie eintragen. Sag nicht, dass das in ein paar Tagen fällig ist. Ich habe es nicht erschaffen. Und so hier ist unser neuer Test, der unten gestellt wurde, weil wir unsere statisch definierten Aufgaben hier einladen ließen . Wenn wir in diese eine neue Testaufgabe studieren und das ist das Fälligkeitsdatum, das wir festgelegt hatten. Es sieht so aus, als ob alles wie erwartet funktioniert, 21. Die Feinschliff hinzufügen: jetzt in der letzten Phase unseres Tutorials, wollen wir unser Aussehen ein wenig besser machen, vor allem auf unserem to do List Table-View-Controller. Insbesondere wollen wir drei Dinge tun. Wir möchten oben in unserer Navigationsleiste einen Titel hinzufügen. Wir wollen diese Zellen vertikal etwas kleiner machen, und dann, wenn wir keine Zellen in unserer Tabellenansicht oder eine leere Liste haben, wollen wir eine Hintergrundansicht haben, die eine Beschriftung anzeigt, dass wir einige Daten zu unserer Tabelle hinzufügen müssen . Lassen Sie uns zuerst mit dem Hintergrund von Ihnen in unserer Tabellenansicht beginnen, und was wir tun werden, ist, dass wir ein Label erstellen, aber wir werden kein Label im Storyboard erstellen. Wir werden es programmgesteuert tun. Also das erste, was wir tun werden, ist die To-Do-Listentabelle von Ihrem Controller zu gehen und unsere Konstruct Datenquellenmethode hier auszukommentieren , und wir werden voran gehen und einen Blick auf das werfen, was wir jetzt haben, wenn wir unsere Datenquelle es auskommentiert haben , und so haben wir nur einen weißen Blick. Wir haben hier nichts, was darauf hinweist, dass wir eine leere Liste haben. Wir sehen einfach nichts. Kommen Sie auf. Also jetzt gehen wir weiter und werfen einen Blick auf eine sehr interessante Eigenschaft in der U I Tabellenansicht . Also, was ich hier tun werde, sind nur Befehle. Klicken Sie auf eine der UI-Verwendungstabellen. Ich habe mich beschränkt und zur Definition und innerhalb der Tabellenansicht gesprungen. Ich suche nach einer Eigenschaft namens Background Byuk, und wenn wir die Dokumentation hier lesen, ist es eine optionale Sie haben und den Hintergrund werden Sie automatisch in der Größe der Tabellenansicht geändert . Dies wird als Unteransicht der Tabellenansicht hinter allen Zellen und Kopf- und Fußzeilen platziert , und genau das werden wir verwenden. Wir werden programmgesteuert eine Beschriftung erstellen, die von Ihnen abgeleitet wird, sehe ich an, und wir werden dieses Label als Hintergrundansicht für unsere Tabellenansicht festlegen. Gehen wir also zurück in den neuen Controller und beginnen, das zu implementieren. Jetzt lassen Sie uns voran und implementieren eine neue Funktion hier, so dass wir gehen und die Erstellung von Funktion namens private Funk Anzeige, leere Tabelle Ansicht Nachricht. Ich hatte gerade gerade die Anzeige der Tabellenansicht wird sagen, dass der Parameter die Nachricht ist , weil das in unserer Methodenbenennung hier etwas klarer ist. Sobald wir das getan haben, geben wir eine Nachricht weiter. Wir werden eine Beschriftung erstellen, und dann werden wir, dass auf die Tabellenansichten, Hintergrundansicht. Erste Schritte werden also ein Label wie dieses erstellt. Lassen Sie uns leer, äh, lassen Sie das Ende Info Label gleich au I label, wenn Sie sich erinnern, ich beschrifte ist, was wir vom Storyboard auf einen unserer View-Controller im Interface Builder ziehen würden . Also im Wesentlichen alles, was wir tun, ist eine von diesen programmgesteuert zu erstellen. Und wenn Sie hier sehen, diese kleine Box, das Rechteck, die Ecken, ist das, was als Begrenzungsrahmen bezeichnet wird, auch als Bounce, ähm, oder der Rahmen. Und so im Wesentlichen das, ist im Wesentlichen das,woraus ein Label besteht, oder irgendein, das ich wie Element sehe. Es ist eine Art Kontrolle mit einer Position einer Box. Es x y-Koordinate innerhalb der Höhe. Und wenn wir ein Etikett erstellen, wenn Sie hier sehen, haben wir ein paar initialisieren er wir haben ein u I beschriftet nur leeres Etikett Brett, und dann haben wir eins mit einem Rahmen und eins mit einem Coder. Da wir also keine Art von Archivierung von Daten durchführen werden, wir die Coder Methode nicht verwenden. Normalerweise könnten wir die Frame-Methode verwenden. Und wenn wir sagen, sagte ein Rahmen, wir sagen wirklich, ich möchte ein X und A Y in der Höhe setzen. Also, zum Beispiel, wenn ich sagte, ich will, dass das bei 100 X ist, vielleicht 100 warum und 200 in 50 und Höhe, Nun, ich könnte äquivalent zurück in das Storyboard gehen, und ich könnte einen Blick hier, und ich könnte diese tatsächlich festlegen, indem ich die X und Y innerhalb der Höhe manipuliert, um visuell zu sehen, wie das aussehen könnte. Und ich könnte genau dasselbe im Code tun, indem ich die Belagerung benutze. Ich beschrifte mit dem Rahmen hier initialisiert, aber das Schöne ist, wir müssen nicht einmal außerhalb des Rahmens herausfinden, weil genau wie die Dokumentation , sagte die Hintergrundansicht der Tabelle, Sie werden automatisch die Größe, die Sie leben, Sie oder das Label oder das Steuerelement in die Hintergrundansicht passen , so dass wir einfach ein U I Label wie folgt erstellen können. Nun lassen Sie uns voran und erstellen Sie die Zuweisung, so dass wir eine Tabelle von Ihnen tun Punkt Hintergrundansicht entspricht der Infoebene und genau dort haben wir voran gegangen und die Zuweisung erledigt, aber wir sind noch nicht ganz fertig. Wir müssen fortfahren und den Text festlegen und unser Label konfigurieren. Was wir hier tun können, neben dem Festlegen des Textes, denken Sie, dass das Etikett nicht den Text entspricht der Nachricht. Also genau da. So weit, so gut. Jetzt müssen wir noch ein paar Dinge festlegen. Wir wollen Text zentriert werden. Wir wollen nicht, dass es gerechtfertigt ist, ein Recht gerechtfertigt. Was wir hier tun können, ist nach Informationen zu suchen, Etikettenpunkt-Text-Ausrichtung, und wir können das gleich der Punktmitte setzen. Darüber hinaus möchten wir die Anzahl der Zeilen auf Null setzen, denn wenn wir eine wirklich lange Nachricht haben, wollen wir unser Label nicht abschneiden. Um, für eine Zeile für eine Zeilewollten wir in mehrere Zeilen überlaufen, also indem wir es auf Null setzen, wird es in genau dieser Situation so viele Zeilen zulassen wie die Nachrichten lang. Jetzt lassen Sie uns voran und setzen Sie den Gedanken So können wir hier tun, ist auf Info-Label. Es hat eine Eigenschaft namens font eso. Es ist au I Schriftart und wir können das programmatisch erstellen Genau wie wir einen Interface-Builder wie diesen setzen würden Sie gefunden, wir werden den anfänglichen Isar-Namen und -Größe verwenden, so dass wir mit Ich denke Helvetica neu und ich denke auf dem größeren Etikett auf dieser Tabelle Zellen war mutig, damit wir das hier ausprobieren konnten und sehen, wie das aussieht. Es wird gesagt, es kann auf eine Größe von 20 sein. Nur so ist es irgendwie groß und hebt sich hervor. Weißt du, die Zecke, äh, hat das falsch geschrieben? Es sieht richtig aus. Unsere Funktion hier sieht ziemlich gut aus, aber wir müssen immer noch herausfinden, wo nennen wir das? Nun, es gibt hier ein paar Möglichkeiten, aber eine wirklich interessante Möglichkeit, zumindest in diesem Beispiel, weil wir nur einen Abschnitt unserer Tabellenansicht haben, ist in unserer Anzahl von Zeilen und Abschnitt. Um und so kann ein Abschnitt als, ah Gruppierung von Daten darstellen und Sie können jetzt mehr als einen haben, wenn wir mehr als einen Abschnitt in unserer Tabellenansicht hatten . Wir können verschiedene Arten von Daten haben, anstatt nur ein Array eines bestimmten Typs. Nun, worauf wir achten müssen, ist, dass wir es immer überprüfen müssen. Nun, wann möchten wir diese Tabelle von Ihnen Nachricht anzeigen? Nun, wirklich, wir wollen es jederzeit anzeigen oder Tabellenansicht ist leer. Woher wissen wir, ob unsere Tabellenansicht leer ist? Nun, unsere Datenquelle wird wahrscheinlich Null für die Zählung sein, und genau das können wir tun. Also, wenn wir in die Anzahl der Zeilen im Abschnitt gehen hier und sagen, ob Datenquelle, die gleich Null oder eine leere Tabellenansicht ist, dann gehen Sie vor und zeigen Sie die leere Tabellenansichtsmeldung an. Und was wir sagen können, ist einige, um Aufgaben zu erledigen. Und dann, wenn die Datenquelle, die Anzahl in diesem Fall größer als Null ist, die Tabellenansicht Hintergrundansicht, die wir sagen, zu wissen, damit sie nicht das Label hat. Es wird wissen, wie ihm keine Ansicht zugeordnet ist. Es wird tatsächlich die Daten rendern. Also jedes Mal, wenn wir Elemente hinzufügen oder entfernen und im Grunde neu laden die Datenquelle. Diese Methode wird aufgerufen und dann werden wir die Überprüfung hier machen. Und dann, wenn wir nichts in der Tabellenansicht haben, wird unsere Nachricht angezeigt. Wenn wir Sachen haben, wird unsere Anzeigemeldung entfernen. Jetzt lassen Sie uns das testen und sehen, wie es aussieht. Also hier ist, wie es aussieht und es sieht in Ordnung aus. Wir können ein bisschen besser machen, weil dieser kühne wirklich auffällt. Ähm und ah, das Boarding ist vielleicht nicht das Beste. Also gehen wir zurück in den View-Controller hier statt fett für diesen Spaß. Verwenden wir stattdessen ein Licht Licht, äh, Größe und anstatt zu tun, versuchen wir es einfach, einige Aufgaben zu erstellen. Lassen Sie uns das noch einmal mit diesen Änderungen ausführen und sehen, ob das aus einer Art von Ihnen aux-Perspektive ein wenig besser aussieht . Und ich denke, das sieht viel besser aus. Also haben wir das Set. Wir sind gut zu gehen. Ah, und jetzt gehen wir weiter und versuchen, einen Titel zur Navigationsleiste hinzuzufügen, und wir können das einfach tun, wenn Sie sich daran erinnern, wie wir es im Detail gemacht haben. View Controller wird interviewt Laden. Wir könnten voran gehen und diese Titel-Eigenschaft auf dem View-Controller auf einen Zeichenfolgenwert setzen. In diesem Fall könnte es sinnvoll sein, nur dio to do list zu tun. Einfach so. Und jetzt gehen wir weiter und führen Sie das aus und sehen, wie es aussieht, mit der für den Titel festgelegten To-Do-Liste . Sieht OK aus und jetzt für eine letzte Änderung, Was wir tun werden, ist voran und ungewöhnlich die Konstrukt-Datenquellen-Methode, nur weil schnell schwächen , werfen Sie einen Blick auf alles hier und mal sehen, ob wir uns ein bisschen kleiner machen können , um den vertikalen Abstand zu verringern, den wir hier zwischen ihnen haben. Also gehen wir zurück in das Haupt-Storyboard und werfen einen Blick auf die Zell-Unterklasse, die wir auf dem Listen-Tabellenansicht-Controller haben , und wenn wir voran gehen und unsere Zelle hier auswählen und werfen einen Blick auf die, äh, tatsächliche Größe davon hier, so dass wir das auf eine 1 45 Höhe eingestellt Jetzt, zunächst, zunächst, sieht es irgendwie in Ordnung, aber als wir begonnen haben, dies weiter zu entwickeln, schien es, als ob es nur ein wenig zu groß sein könnte, wie einfach unsere Datenstrukturen sind. Wenn wir also eine Abnahme wollen, die sich vertikal verbirgt, müssen wir ein paar Dinge bewegen. Anfänglich können wir hier unser Untertitel-Label nehmen und ein bisschen nach oben fahren, einfach so leicht bis zum Ende des Titellabels. Und denken Sie daran, dass diese Ah-orangefarbenen Warnungen hier sagen, dass unsere Zwänge immer noch hier sind . Aber wir haben unseren Rahmen hierher verschoben, also müssen wir voran gehen und entweder den Rahmen aktualisieren, ihn dann wieder hierher bringen würde, was wir nicht tun wollen oder die Einschränkungen aktualisieren, um ihn dort zu positionieren, wo der neue Frame ist das jetzt. Also mit dem Label Schwächen ausgewählt, gehen Sie hier zur Lösung von automatischen Layoutproblemen und hatte einfach nur Update, Constraint-Konstanten, und ich werde voran gehen und kümmern uns darum für uns. Nun, wenn wir zur Zeilenhöhe zurückkehren, fangen wir an, das etwas zu einer Zeit zu verringern. Versuchen Sie, etwas zu bekommen, das jetzt gut aussieht. Es sieht so aus, als würden unsere Etiketten dort etwas zerschmettert. Das ist in Ordnung. Lass es uns auf 20 fallen und dann gehen wir weiter und nehmen das Etikett noch einmal, bringen es wieder runter, irgendwie bündig an den Rand hier, und ich denke, wir könnten ein bisschen besser machen. Gehen wir weiter und nehmen den Verkauf und fahren ihn runter auf 15 und sehen, wie das aussieht. Wir nehmen, dass einige Titel, in der Lage wieder zerstört und bewegen Sie es mit dem Layout aus. Richtlinien richten uns an, Doc, und wir werden die Einschränkungen so aktualisieren, wie wir es getan haben. Und lassen Sie uns sehen, wie weit dieses Label vom Titellabel entfernt ist, also wählen wir es aus. Wir gehen hier rüber zu diesem Button und erhalten, die genau für weg vom nächsten Label waren . Das ist also ziemlich nah dran. es fast berührt. Das ist in Ordnung. So wird das optisch besser aussehen als das, was wir vorher hatten. Denken Sie hier daran, obwohl wir diese Zeilenhöhe auf 1 15 aktualisiert haben, müssen wir es auch im View-Controller tun , da es eine Zeilenhöhe von 1 45 zurückgibt, weil wir das nicht aktualisiert haben , und das wird überschreiben diese 1 15 hier und machen unsere Tabelle von Ihnen verkaufen schlecht aussehen aus einer visuellen Perspektive. Also, wenn wir zurück in den to do Listen-Tabellenansicht-Controller gehen. Die letzte Änderung wird sein, dass es diese 1 45 in eine 1 15 verwandelt hat Nun gehen wir voran und führen Sie dies im Simulator aus und sehen, wie es aussieht. Das sieht viel besser aus, viel weniger Verschwendung im Weltraum. Und lassen Sie uns voran gehen und Kommentare aus sind Datenquellenmethode konstruiert hier und erstellen Sie eine Aufgabe von Anfang bis Ende mit allen unseren Änderungen in hier und C sind abgeschlossen App. Also Grayson Aufgaben beenden Projekt Beschichtung und sagte es für morgen. Ja, gut, großartig. Sieh dir das an. Sieht ziemlich gut aus. Wir haben alles richtig eingestellt, wie wir es wollen, und es sieht viel besser aus als das, was wir vorher hatten.