Transcription
1. Aperçu du cours: Bonjour, Je m'appelle Jeff, et bienvenue au cours IOS Fundamentals où nous allons construire notre première application qui ressemble à ceci. Ce cours suppose que vous possédez une expérience de base en programmation et que vous souhaitez en savoir plus sur le développement d'applications IOS. Ce cours est composé de 20 tutoriels vidéo pour chaque vidéo, couvre un sujet IOS spécifique et applique ensuite ce sujet à la construction de notre application. Chaque vidéo du Siri s'appuie sur les vidéos qui l'ont précédé afin que vous puissiez coder dans votre propre projet pour chaque étape de la réussite de ce cours, assurez-vous que vous comprenez le sujet abordé dans chaque vidéo, et serait bénéfique pour coder chaque vidéo de la série. Le projet final de ce cours utilise un grand nombre des compétences que nous avons acquises et les
applique à une nouvelle application avec un ensemble d'exigences différentes. Merci de vous inscrire à ce cours, et j'ai hâte de vous voir dans le premier tutoriel vidéo
2. Obtenir la configuration: La toute première chose que nous devons faire est de mettre en place le code X. X Code est l'environnement de développement intégré principal d'Apple, et c'est ce que nous allons utiliser pour tout ce tutoriel. Donc, si vous êtes sur un ordinateur Mac, si vous allez dans l'APP Store et que vous recherchez du code X, ce devrait être la première chose qui arrive. Donc, nous voulons faire est de télécharger le code X, et une fois Ex Card téléchargé, allez-y et ouvrez-le et créera notre premier projet. La plupart des cartes Ex sont ouvertes et configurées. Accédez à la page Créer un nouveau projet et vous serez accueilli avec un menu qui ressemble à ceci. Assurez-vous que vous êtes dans la section IOS et que nous allons sélectionner une application de vue unique. Vous remarquerez ici qu'il y a quelques autres types de modèles, comme une page basée sur une base d'onglets en haut et quelques autres. Mais nos intentions et les objectifs que nous voulons utiliser une application à vue unique, alors allez-y et appuyez ensuite, et nous devons aller de l'avant et donner à ce projet le nom de sorte que nous allons juste appeler ce projet un et vous aurez besoin de sélectionner une organisation et pour une équipe Je vais mettre mon équipe n'est pas parce que je n'utilise pas de profil de développeur associé à cela en ce moment pour le nom de
l'organisation dans l'organisation. Identifiez où vous pouvez trouver un nouveau nom d'organisation que vous estimez approprié dans un identificateur. Vous pouvez également trouver votre propre identifiant pour cela également. Pour la langue que nous allons utiliser Swift et pour les tests unitaires ici, je vais décocher cette case. Nous ne ferons aucun test dans cette demande de renseignements Siri ALS donc une fois que tout mis en place, allons de l'avant et frappons ensuite et placer le projet où nous le voulons. Et une fois que nous avons fait cela, nous pouvons aller de l'avant et commencer à jeter un oeil sur ce que nous avons à l'intérieur de cette structure de projet. Voyons donc rapidement comment le projet est structuré. Si on va en haut à gauche. Cette icône bleue est ce qu'on appelle notre fichier Project, et elle contient à peu près tous les fichiers de code source, les fichiers l'interface utilisateur. Il sait où vit chaque fichier de notre projet et a une référence à celui-ci Lorsque nous sélectionnons notre fichier de
projet, nous voyons que nous avons ici une section appelée cibles. Les cibles sont essentiellement l'application. L' application que nous construisons est une application appelée Project One et un bundle APP contient toute
la ressource est et le code compilé qui construit notre application dans toute la logique à l'intérieur de celui-ci . Ainsi, lorsque vous sélectionnez la cible ou que vous sélectionnez essentiellement votre application, vous pouvez voir que ces onglets apparaissent, tels que les fonctionnalités générales, paramètres
intégrés et les phases de construction. Il y a beaucoup de petites informations ici que nous devrons peut-être changer au fil du temps. Mais en général est l'endroit où vous trouverez des choses telles que le nom complet de l'application, le bundle identifier où la version de l'équipe que vous utilisez pour votre équipe de développeurs, ainsi que de nombreux autres paramètres tels que le déploiement, cible, les dispositifs et ainsi de suite et ainsi de suite. Donc, beaucoup de fois, nous devons avoir une compréhension des choses que nous pouvons changer ici si nous devons modifier les paramètres du projet pour notre application. Donc, en retournant à gauche, nous avons nos fichiers rapides. Ce sont les fichiers de code source qui allaient écrire la plupart de notre logique dans l'application . Ensuite, nous avons ce qu'on appelle un fichier storyboard, et c'est la représentation visuelle de notre application. Comme nous commençons à créer différents écrans dans l'APP, nous pouvons ajouter différents éléments vous à ce story-board pour construire une mise en page visuelle de l'endroit où l' APP va ressembler et de la façon dont elle va circuler. En outre, nous avons ce qu'on appelle un dossier Assets. C' est là que nous allons mettre des choses telles qu'une icône d'application sont des icônes pour différentes ressources est dans notre laboratoire et différents écrans et vues, peut-être une image de profil. Nous les mettrons ici, ainsi que d'autres actifs, dans le catalogue des actifs. Nous voulons nous assurer que notre projet compile, construit et fonctionne
avec succès sur notre simulateur , afin d'exécuter réellement l'application. Si nous montons ici, nous voyons que nous avons ce bouton de lecture qui nous donne différentes options. Si nous cliquons dessus, nous avons la possibilité d'exécuter pour tester le profil sur l'application de l'analyseur. Donc, avant de l'exécuter, nous voulons nous assurer que nous sélectionnons la cible de l'application, qui est le Projet 1 pour notre exemple comme le projet sélectionné ici. Cible sélectionnée. Maintenant, une fois que vous avez cela, vous devriez avoir une option de simulateurs à choisir. Je vais choisir un simulateur iPhone SC juste pour l'exécuter pour m'assurer que cela fonctionne. Si aucun simulateur n'apparaît pour quelque raison que ce soit, s'il y a un problème d'installation, vous avez l'option. Ici, c'est vous téléchargez des simulateurs, et si vous cliquez dessus,
cela vous emmènera dans la liste des temps d'exécution simulés que vous pouvez télécharger. Et une fois que ça sera terminé, vous aurez une liste de simulateurs qui apparaîtront chez cet homme. Vous déposez. Donc, une fois que vous avez sélectionné votre simulateur, allez-y et appuyez sur le bouton de lecture et cela va compiler le projet, construire notre ensemble d'applications et l'installer sur le simulateur, et jusqu'à présent, il semble que tout va bien. Vous pouvez voir cela, dit le lancement du projet un, et nous allons juste donner à cette minute la minute du simulateur pour démarrer et vérifier que tout va bien. Mon simulateur est en cours d'exécution, et je vois un fond blanc, ce qui est un bon signe, et si nous retournons à notre planche principale et le sélectionnons pour qu'il apparaisse ici et
nous retournons en arrière et jetons un coup d'oeil à notre simulateur. Ce que nous voyons dans notre simulateur en ce moment est la représentation visuelle de ce
contrôleur de vue à partir du storyboard, vous pouvez voir qu'il n'y a pas d'éléments d'interface sur ce contrôleur de vue, comme un champ de texte ou tout type de et c'est un fond blanc. Et puisque c'est le contrôleur de vue de départ, c'est ce qui est présenté ici dans le simulateur. Alors maintenant, jetons un coup d'oeil plus profond dans les contrôleurs de vue et comprenons un peu plus sur la façon dont ils sont le pain et le beurre d'une application IOS.
3. Tout en termes de vues: maintenant allez-y, sélectionnez le contrôleur de vue à l'intérieur de la planche principale et descendez dans le
coin inférieur gauche ici. Et assurez-vous de développer cette option de menu décrit du document. Et quand vous le faites, vous aurez votre hiérarchie de contrôleur de vue ici, et vous pouvez le voir avec son contrôleur de vue. Il contient une vue, et un contrôleur de vue est le pain et le beurre les blocs de construction d'une application IOS. Vous pouvez considérer un contrôleur de vue comme un écran dans une application qui pourrait contenir un certain nombre d' éléments tels que des champs de texte et d'autres vues et vues de tableau. Ainsi de suite et ainsi de suite quand nous voulions des écrans supplémentaires dans notre application. Pour la plupart, nous allons créer une forme quelconque de contrôleur de vue,
et nous allons naviguer d'un contrôleur de vue à un contrôleur de vue, passant des données de l'un à l'autre pour naviguer dans notre application à travers ce qu'on appelle Segways. Et essentiellement, le contrôleur de vue peut simplement est que c'est un contrôleur qui contrôle les vues, et c'est son travail dans le but principal. Donc, si nous voulons ajouter des éléments à un contrôleur de vue, ce que nous pouvons faire à partir d'une perspective de timbre storyboard est, si nous descendons ici à la bibliothèque d'objets et commençons à regarder à travers la sélection
d'options sélectionnées ici, nous pouvons faire glisser des éléments sur la vue. Donc, disons, par
exemple, je voulais ajouter un champ de texte qui commence pour le champ de texte et que j'obtiens une option ici. Et Aiken, faites-le glisser sur le contrôleur de vue. Et si vous revenez en arrière et regardez la hiérarchie ici, vous pouvez voir que cette vue contient une sous-vue pour un sous-composant. Et c'est le champ de texte. Et en général, c'est ainsi que nous allons concevoir le plus pour vous les éléments de ce cours. C' est génial pour les débutants. Il est visuellement facile à voir, et il représente le flux de notre application, et nous pouvons avancer assez rapidement en faisant cette approche. Donc, maintenant que nous avons une compréhension de base, vous
avez des contrôleurs travaillant à l'intérieur d'un fichier storyboard, nous devons comprendre comment ils se rapportent aux fichiers de code source. Donc, si vous allez ici et que vous allez sur l'icône de l'éditeur assistant et cliquez
dessus, ça va ouvrir le panneau latéral et nous pouvons avoir notre contrôleur de vue dot swift file
côte à côte avec notre contrôleur de vue du storyboard. Et comme nous regardons ici, si nous sélectionnons notre contrôleur de vue et nous retournons ici sur le côté droit et nous allons à la classe,
Inspecteur, Inspecteur, vous pouvez voir qu'il y a une classe appelée contrôleur de vue. Donc, par défaut, le contrôleur de vue qui est créé dans le projet est automatiquement affecté à ce fichier de
code source ici. Et comme nous créons des contrôleurs de vue supplémentaires, nous devons assigner le fichier de code source à mapper au contrôleur de vue correspondant dans le fichier
storyboard. Alors faisons-le pour un exemple. Juste pour que tu ne comprennes pas comment accomplir ça. Alors revenez ici à la bibliothèque d'objets. Ce que nous voulons faire est de chercher un contrôleur de vue et nous pouvons faire glisser cet élément sur notre storyboard ici. Et maintenant, nous avons une seconde, vous contrôlez. Il n'a pas de sous-classe ou aucune sorte d'association avec le fichier de code source. On va créer ça maintenant. Sélectionnez donc un nouveau contrôleur de vue que vous venez de créer et passez à votre code source. Et sous votre dossier, clic
droit et allez dans un nouveau fichier et nous allons utiliser un nouveau fichier swift ici, et nous allons appeler ce contrôleur de vue de détail, et nous allons aller de l'avant et créer ce fichier. Maintenant, assurez-vous d'avoir votre vue détaillée. contrôle est sélectionné ici, et je vais en faire parler dans ma main droite. Si je clique sur ce menu et accède aux fichiers récents, je peux rechercher le contrôleur de vue détaillé. Si vous voyez l'interface, ne cliquez pas sur celle-ci. Assurez-vous que vous quittez celui qui ne dit pas interface. Donc, cela fera apparaître le fichier de code ici sur le côté gauche. Gardions notre storyboard ouvert et faisons l'association entre ce fichier de
code et ce que vous élément ici. Donc, nous devons vraiment créer notre classe. Et nous le faisons en important dans le cadre nécessaire qui contient des contrôleurs de vue. Et ce que nous ferons est important. Vous, moi les enfants, je vais vous expliquer dans une minute pourquoi nous devons faire ça. Nous devons donc créer notre contrôleur de vue de détail de classe, qui dérive de vous. Je vois le contrôleur et allons de l'avant et obtenir cela structuré. Et nous allons ajouter une méthode ici appelée View, a chargé et nous allons juste faire un super travail. Vous avez chargé et nous allons décomposer exactement ce qui se passe par ce qu'on vient de faire. Donc, le contrôleur U I view provient des pommes. Vous je kit cadre. Il contient le niveau de base que vous contrôlez que Apple nous fournit d'utiliser dans le développement
d'applications pour l'Iowa's. Et fondamentalement, nous disons qu'il y a un contrôleur de vue détaillé est est-ce que c'est une
sous-classe ing ou pas une sous-classe ing mais arrive de vous. Je vois le contrôleur. Donc, il contient toutes les propriétés et les éléments qui viennent de vous. J' ai kit. Comment fait-on cette association d'ici à ici ? Eh bien, c'est assez facile. Si vous sélectionnez le contrôleur de vue dans le storyboard et que nous revenons à l'
inspecteur de classe ici maintenant, nous avons la possibilité de créer notre sous-classe. Et donc si vous voyez ici est à la recherche de n'importe quel type de vous avez votre contrôleur et nous
arrivons juste à en faire un appelé un contrôleur de vue détaillé afin que nous puissions créer l'association ici en
tapant en détail, contrôleur de
vue et vous pouvez voir exécute automatiquement le remplissage pour nous. Et une autre chose que nous voulons faire ici est de mettre en place un storyboard. Je d. Et généralement ce que tout utilise le nom de la classe comme nom du storyboard I d. Et cela signifie essentiellement que lorsque nous cherchons à charger le contrôleur de vue programme peut-être que nous pouvons toujours le chercher par son nom, qui est l'orteil du contrôleur de vue détaillé, chargez-le dans le code. Donc, une fois que vous avez configuré cette configuration, vous avez maintenant créé le lien entre le fichier de code source dans les
U.S. U.S Dans l'élément U ici. Jetons donc un coup d'oeil à la charge visualisée. Si nous commandons cliquez sur vous, avez votre contrôleur et aller à sauter la définition. C' est là que nous pouvons voir toutes les différentes méthodes disponibles qu'Apple nous fournit que nous pouvons utiliser le de vous. Vous avez votre contrôleur. Vous pouvez voir ici. C' est de là que vient le chargement de la vue. Et il dit ici dans les commentaires appelés après que la vue a été chargée pour la vue, contrôle est créé et le code. C' est après beaucoup d'entre vous. Et généralement c'est là que nous faisons la plupart de notre code mis en place pour la plupart des circonstances est quand cette méthode est appelée. Il est donc très important que nous remplacions cela dans notre sous-classe pour afficher le contrôleur, et nous allons certainement entrer dans plus de ces méthodes de cycle de vie à mesure que nous avançons.
4. Segues et contrôleurs de navigation: Parlons maintenant de Segways, Segways ou comment nous passons d'un contrôleur de vue à un autre contrôleur de vue. Et nous pouvons le faire de différentes façons. Et nous allons commencer par ce qu'on appelle un Segway mobile. Et pour ce faire, nous voulons faire quelques choses. Donc, la première chose que nous voulons faire sur notre détail de votre contrôleur est de changer la couleur de la vue afin que nous puissions distinguer visuellement quel contrôleur de vue était activé. Donc, si vous avez votre nouveau contrôleur détaillé sélectionné ici, si vous allez plus et vous trouvez la vue ici et vous sélectionne et ensuite vous allez ici, nous voulons sélectionner l'onglet pour les attributs. Inspecteur, on descend à la vue, couleur de
fond, et j'allais changer d'avis à une couleur différente ici, voir visuellement que c'est l'écran des détails. Maintenant, afin de déclencher le Segway, nous avons besoin d'une sorte de clic de bouton où vous élément avec lequel un utilisateur interagirait pour passer de l'un à l'autre. Et nous pouvons descendre à la bibliothèque d'objets ici et chercher un bouton et nous pouvons faire glisser ce bouton sur notre premier contrôleur de vue, et je vais laisser le champ de texte que j'avais là à partir de plus tôt. Et nous faisons tous, c'est mettre le bouton au centre. Je vais le faire glisser vers l'avant, et je zoome un peu sur la toile ici et juste augmenter l'intérieur de la hauteur du bouton et le centrer. Et si vous passez ici avec votre bouton sélectionné, nous avons utilisé à la place du bouton texte par défaut. Eh bien, juste dio dire où et ce que nous devons faire ensuite est en fait créer la connexion pour faire le Segway. Maintenant, la façon la plus simple de le faire est un constructeur d'interface, et ce faisant, nous pouvons maintenir notre bouton de sélection. Nous pouvons maintenir enfoncée la touche de contrôle sur le nettoyage du clavier,
cliquer, puis faire glisser vers la vue détaillée, contrôleur et la libération, et vous verrez que nous avons une action Segway qui apparaît. Nous avons un spectacle, un détail de spectacle, mode
présent tôt, et puis nous avons ces ID Segways non adaptatifs obsolètes. Donc ce qu'on va faire est un spectacle et vous verrez tout de suite que cela crée la connexion d'ici à ici. Alors exécutons ceci dans le simulateur et voyons exactement à quoi cela ressemblera. Mes simulateurs sont en marche ici. Et ne vous inquiétez pas si vos boutons sont un peu centrés tant que vous pouvez toujours le voir,
c' est bon. Nous allons parler de la façon de positionner, verrouiller les choses avec la mise en page automatique plus tard dans la série. Si maintenant, allez-y et appuyez sur le bouton Segway et vous pouvez voir que nous sommes allés à notre
contrôleur de vue détaillé , nous avons un vrai écran ici, mais malheureusement nous n'avons aucun moyen de revenir à notre vue de départ contrôleur. On est coincés ici parce qu'on n'a aucun moyen de rejeter le flux. Vous voyez, nous n'avons pas de bouton de retour ou de moyen de descendre. Et ce type de Segway est connu comme un Segway mobile. Il est utilisé pour présenter des informations qui prendraient le plein écran, et probablement il serait utilisé pour capturer une sorte d'entrée utilisateur comme, disons , un formulaire d'inscription, un journal informer sur lequel avait encore quelqu'un pour rejeter le flux. Maintenant, évidemment, nous n'avons pas ajouté de bouton ici, donc nous sommes coincés pour le moment. Maintenant, nous pouvons facilement corriger cela avec ce qu'on appelle un contrôleur de navigation. Maintenant, vous allez revenir à votre Story Board et sélectionner le Segway réel et le supprimer. Et ce qui va faire à la place, c'est que nous allons introduire cette idée d'un contrôleur de navigation. Et le moyen le plus simple de configurer ce contrôleur de vue avec un contrôleur de navigation est de sélectionner votre nouveau contrôleur, aller dans le menu de l'éditeur ici, d'intégrer et de sélectionner le contrôleur de navigation. Et tout de suite. Ce que vous allez voir, c'est que nous avons ce contrôleur de navigation qui pointe vers notre
contrôleur de vue tout en haut. Ici, nous avons une barre de navigation, et ça va être important dans un instant. Répétons donc les mêmes étapes. Nous allons connecter notre bouton ici au contrôleur de vue détaillé ici. Donc, si nous maintenons la touche de contrôle enfoncée, cliquez et faites glisser dessus. Nous avons notre action. Segway arrive et nous allons faire montrer et vous verrez maintenant que nous avons un bouton de retour sur notre contrôleur de vue détaillé que nous n'avions pas auparavant. Alors allons de l'avant et lançons ça dans le simulateur, puis nous allons passer par une discussion sur les contrôleurs de navigation et ce qui se
passe exactement ici ? Donc maintenant, si je clique sur mon bouton Segway ici, vous verrez que nous allons dans le contrôleur de vue de détail. Mais on a un moyen de revenir. On a un bouton de retour, on appuie sur le bouton de retour, on y retourne. Si nous avons eu Segway à nouveau, nous allons de l'avant, et vous pouvez également voir que l'animation est différente. C' est presque comme s'il glisse, et une autre chose que vous pouvez faire ici est que si vous faites glisser un peu sur les bords, vous avez la possibilité de faire glisser à travers pour revenir en arrière aussi. Et c'est juste une fonctionnalité des contrôleurs de navigation qu'ils ont pris en charge par défaut, sauf si vous l'éteignez. Et si vous vous souvenez, le Segway mobile ou le premier segment que nous avons fait est venu du bas et notre contrôleur de
navigation, Segway glisse sur le côté. Maintenant, nous allons creuser un peu dans les contrôleurs de navigation. Le contrôleur de navigation est un type de vous que je vois contrôleur. En fait, le contrôleur de navigation dérive de vous, avez-vous contrôleur, donc il hérite de toutes les propriétés que vous avez le contrôleur a, mais il ajoute sur une barre de navigation et un tableau de vos contrôleurs que le gère la pile de navigation. Vous pouvez penser à Seguin entre les contrôleurs de vue comme poussant et popping des contrôleurs de vue sur et hors de la pile. La pile interne de vos contrôleurs que contient le contrôleur de navigation. Donc, par défaut, lorsque vous ajoutez un contrôleur de vue via le storyboard et que vous vous connectez via un Segway. Quel que soit ce contrôleur de vue de détail, ou tout autre contrôleur de vue dérivé de ce contrôleur de navigation, nous hériterons tous la barre de navigation, qui fournit un bouton de retour ou un moyen de revenir en arrière sauf si nous l'éteignons pour changer pour faire autre
chose. Eh bien, alors vous pourriez vous demander, quel type de saké attendre, dois-je utiliser faire est un modèle ou est-ce que j'utilise un contrôleur de navigation ? Et cela dépend vraiment du flux de vos contrôleurs dans votre projet et de ce que vous
essayez de faire. Donc, si vous avez le contrôleur de vue autonome que vous pouvez présenter de n'importe où, et peut-être qu'il va collecter des informations sur l'utilisateur dans un formulaire ou dans un tutoriel ou un
logo de splash ou quelque chose qui pourrait être présenté, alors rejeté. Un modèle Segway aurait le plus de sens maintenant dans une série d'écrans comme celui-ci où vous
avez , ah sorte de relation parent enfant ou une relation de vue détaillée maître que
d'avoir une barre de navigation spécialement si elles avaient besoin. Le contrôleur de navigation a un sens parfait car vous pouvez commencer avec une vue et explorer une série de vues qui sont toutes interdépendantes, puis vous pouvez facilement remonter la pile vers le contrôleur de vue parent.
5. Comprendre les contrôleurs de vues de table: jusqu' à présent, nous avons abordé vous, vous
avez des contrôleurs et des contrôleurs de navigation, et nous avons un peu de compréhension de la façon de se déplacer dans une application. Mais pour construire une application de liste à faire, nous avons besoin fondamentalement d'une liste. Donc, ce dont nous avons vraiment besoin en termes de liste pour l'Iowa est une vue de table, et plus précisément nous allons utiliser un formulaire spécialisé appelé la table de votre contrôleur . Maintenant, une table de votre contrôleur n'est rien de plus qu'un spécialiste. Vous avez votre contrôleur qui contient une vue de tableau dans les implémentations, certaines des méthodes et fonctionnalités nécessaires pour qu'une table de vous affiche ses données et pour personnaliser les cellules ou les lignes des données. Donc, si nous descendons à notre bibliothèque d'objets ici, lorsque nous recherchons le contrôleur de vue de table, vous verrez que nous en avons un qui apparaît dans la liste. Et si nous allons de l'avant et faites glisser qui possède le canevas, nous pouvons voir tout de suite que nous avons une vue de table, une cellule ou une table que vous vendez, et cela nous est donné par défaut,
juste à partir d'une table de votre contrôleur. Et si nous sélectionnons notre contrôleur de vue de table ici et allons dans la hiérarchie de documents, si nous regardons ici et nous voyons que nous avons une table de vous, la cellule réelle, puis la vue de contenu de cette cellule et c'est ce que nous allons commencer
pour notre liste de choses à faire est que nous allons commencer à structurer et à configurer notre contrôleur de vue de table afin qu'il puisse être en mesure de charger nos éléments de liste à faire et nous permettre d'ajouter de nouveaux éléments de liste à faire et de faire des sélections pour explorer la vue des détails pour les éléments que nous sélectionnons de la liste, comme nous l'avons fait avec notre contrôleur de vue détaillée. Nous voulons connecter un fichier de code source rapide à notre contrôleur de vue de table correspondant ici. Alors allons-y et faisons-le. Maintenant, allez dans le fichier du projet ici et dans le dossier de code source et faites un clic droit sur le dossier et faites un nouveau fichier et sélectionnez un fichier swift. Et je vais appeler le mien pour faire le contrôleur de vue de table de liste, et je vais créer cela et tout de suite nous devons aller de l'avant et faire notre important habituel de vous comme ça, qui contient la classe et toutes les méthodes et fonctionnalités pour contrôleurs de vue de table ainsi que vous avez vous avez des contrôleurs à et nous allons faire classe pour faire contrôleur
de vue de table liste . Et ça va dériver de vous I contrôleur de vue de table. Et nous allons remplacer la méthode de vue n'a pas regardé, qui sera notre point d'entrée une fois que ce contrôleur de vue se chargera pour la première fois. Et une fois que nous avons mis en place ici, assurez-vous que vous êtes dans l'éditeur adjoint. Si votre éditeur assistant est fermé, vous pouvez l'ouvrir simplement en cliquant sur le bouton juste ici pour l'ouvrir. Et allons de l'avant et ouvrons notre storyboard d'un côté et je vais mettre le mien sur le côté
droit ici et regardons, assurons que nous avons nos contrôleurs de vue de table sélectionnés et nous irons voir l'
inspecteur de classe ici et où il dit que vous voulez le contrôleur de vue Table. Nous allons changer ça pour le contrôleur de vue de table de liste à faire. Nous allons aussi copier ce nom. Utilisez-le pour le storyboard i d. Dans la restauration I d. Ainsi, nous pouvons le trouver par le même nom. Et maintenant, jetons un coup d'oeil à ce que vous avez le contrôleur de vue de table afin que vous puissiez commencer juste que les commandes en cliquant sur vous. Je prends le contrôleur de vue, qui nous emmènera dans la documentation de cette classe. Donc, en regardant votre contrôleur de vue de table, nous pouvons voir quelques choses. Si nous regardons la hiérarchie d'héritage et les protocoles auxquels elle se conforme, elle dérive de vous, avez-vous le contrôleur ? Donc, tout de suite, U. S. A. Avec le contrôleur contient toutes les fonctionnalités ou hérite de la fonctionnalité que le contrôleur de vue expose. Mais en plus de cela, il a sa propre vue de table, ce
qui en fait le contrôleur de vue de table ainsi que l'implémentation du
délégué de vue de table dans les particules de source de données. Et on va en approfondir la technique pour l'instant. Mais ce qui est important à savoir, c'est qu'il s'agit d'un autre spécialiste. Vous avez votre contrôleur qui contient une vue de table et nous permet de faire diverses opérations sur les éléments de cette liste dans cette table de vous. Alors maintenant, revenons en arrière et commençons à mélanger certaines choses dans notre storyboard. Ce que nous voulons Dio est de remplacer notre contrôleur de vue un par le bouton Segway et de le retirer complètement. Notre contrôleur de vue de table liste à faire va prendre sa place à la place. Donc, ce que nous pouvons Dio est de sélectionner nos Segways du contrôleur de vue au détail et nous allons aller de l'avant et appuyer sur la touche de suppression pour supprimer cela en même temps, nous allons supprimer complètement ce contrôleur de vue et son contrôleur de navigation afin que nous peut en quelque sorte sélectionner les deux et supprimé à partir d'ici. C' est plus facile parfois si vous choisissez
dansla la hiérarchie vue ici. Et je vais faire la même chose pour le contrôleur de navigation. Maintenant, ici dans le code source du projet. Je vais aussi vous retirer le contrôleur aussi vite. On n'utilisera plus ça. Et nous allons remplacer ça par notre contrôleur de vue de table de liste à faire, donc nous allons nous débarrasser de ça pour l'instant. Et nous allons ramener notre contrôleur de vue de table de liste à faire, et nous allons le mettre à l'intérieur d'un contrôleur de navigation de la même façon que nous l'avons fait avec notre contrôleur de vue donc sélectionné nous allons aller à l'éditeur et ensuite nous allons faire intégré un contrôleur de navigation. Et donc en ce moment, notre contrôleur de vue de table vient d'hériter d'une barre de navigation et il a une table de vous. Il a donc beaucoup de choses dont nous avons besoin pour établir une liste de choses à faire. Et une autre chose que nous devons nous rappeler de faire est que si nous devions exécuter cela maintenant, nous devons nous assurer que nous devons trouver ces contrôleur de vue de départ. Donc, dans ce cas, puisque le contrôleur de navigation est le premier élément qui va être chargé, assurez-vous qu'il est le contrôleur de vue de départ. Et nous pouvons le faire en le sélectionnant, passant à l'inspecteur des attributs ici. Et il une petite case à cocher est contrôleur de vue initial. Assurez-vous que vous avez coché cela et vous le saurez car vous avez
ici cette petite flèche grise indiquant qu'il s'agit du contrôleur de vue de départ dans ce fichier de storyboard. Allons-y et lançons ça tout de suite, et on ne verra rien, mais faisons en sorte que tout fonctionne dans notre simulateur. Donc, je regarde ce qui semble être une liste vide. Mon contrôleur de vue de table est en cours d'exécution. C' est le contrôleur de vue de départ, mais il n'y a rien dedans. Je peux faire glisser un peu, et si vous pouvez voir que ma vue de table rebondit quand je me déplace,
Um, Um, mais à part cela n'est rien de plus qu'une liste vide avec la barre de navigation en haut
jusqu'à ce que nous commencions implémentant réellement le code pour connecter notre source de données et afficher éléments dans la liste, et c'est que nous allons commencer à le faire dès maintenant.
6. Mettre en place la liste TODO: maintenant, pour créer n'importe quelle liste, nous avons besoin d'éléments à faire pour les tâches. Nous allons donc créer un modèle de données qui représente une tâche. Et si nous passons à notre hiérarchie de fichiers de projet ici et nous allons créer un nouveau fichier
swift pour représenter cette tâche, alors faites un clic droit et faites un nouveau fichier final assez rapide. Et appelons ce type de tâche et nous allons créer un autre fichier. Alors retournez dans le dossier, cliquez avec le bouton
droit sur Nouveau fichier, et nous allons réellement créer une tâche, donc nous allons juste appeler cette tâche. Maintenant, le type de tâche va définir la catégorie dans laquelle notre tâche va tomber. Et ce sera juste n'importe quel newme de type tâche, et nous allons créer différentes catégories. Représentez ceci. Donc peut-être que nous avons un cas pour étudier un cas pour le travail de maison, un cas pour le revêtement, et peut-être pour la planification des vacances, et je pense que c'est bon pour le moment. Donc, nous avons quelques types de tâches différents que nous définissons pour ce que nous sommes intéressés à le
trouver et maintenant nous allons revenir à la tâche aussi rapide et créer une nouvelle classe pour représenter cette tâche de classe, et cette classe va contiennent quelques propriétés. Donc on va avoir un titre de tâche. Nous allons juste l'appeler « Type String ». Laissez la date d'échéance, la date de type et laisser le type de tâche prendre. Et une chose que nous ferons ici, c'est que nous allons les rendre privés afin que leur seul contenu dans cette classe. Et puis nous avons besoin d'un Isar initial pour injecter des valeurs pour chacune de ces
propriétés privées . Donc, vous avez un Isar initial et cet izer initial va contenir une force de type de titre , une date de type de date d'échéance dans un type, la bande de tâches et ce que nous allons faire à l'intérieur du corps de cet izer initial est un signe chacun de ces valeurs injectées à nos propriétés privées dans la classe, donc auto-titré est égal à la date d'échéance du titre est égale à la date d'échéance et à l'auto. Ce type est égal à type et assurez-vous d'avoir aucun problème de compilation. Allez-y et faites commande soit ou vous pouvez aller ici au produit et construire,
et vous voyez la commande d'être est la touche de raccourci pour représenter cela. Assurez-vous simplement que notre code compile avec succès. On dirait que c'est le cas. Donc maintenant, avec notre modèle de données configuré, nous devons aller de l'avant et créer des instances de tâches et les ajouter à la liste ici afin que nous
puissions les voir visuellement représentés comme Rose dans notre vue de tableau. Donc maintenant, nous devons réellement retourner à notre table de liste de tâches de votre contrôleur. Et quand nous le faisons, nous devons réellement commencer à écrire un peu de code ici. Donc tout de suite, nous avons notre table dans le contrôleur. Cette sous-classes que vous je tableau contrôleur de vue en dérive. Et la première chose que nous devons faire est de créer une source de données, et la source de données va contenir toute la rose pour une vue de table et définira que comme ce Private, Notre source de données de type A collection de tâches équivaut à une liste vide à Commencez. Et ce que nous allons faire ici, c'est créer une fonction privée, construire une source de données, et nous allons appeler ça juste après le chargement de notre vue. Donc, nous allons juste appeler la source de données de construction ici. Maintenant, ce que cette méthode va faire est de créer quelques tâches en les ajoutant à notre tableau de
sources de données . Donc, ce que nous allons faire ici, c'est la source de données qui dépendent. Et nous allons juste à l'intérieur de ça, une nouvelle tâche. Donc, nous allons faire la tâche et nous allons faire titre pour le 1er 1 étudiera la programmation une date d'échéance. Et nous allons utiliser la date d'aujourd'hui pour maintenant. On nettoiera ça plus tard. Et pour le type de tâche pour celui-ci sera juste le codage par points car c'est le type qui correspond à cette tâche. Et je vais copier ça et coller ça Ah, toutes les deux fois de plus et on va changer la tâche là-dedans. Donc, pour le prochain va juste faire la lessive et nous allons changer le type deux dot house travail . Et pour la dernière, euh, eh bien, dio planification voyage où nous voulons aller. Euh, l' Espagne ? Que diriez-vous de spin jouer voyage en Espagne et pour le type entendu fera la planification des vacances. Nous sommes donc allés de l'avant et avons construit notre source de données et maintenant la prochaine chose que nous devons faire est implémenter deux des méthodes ici qui nous permettent d'ajouter la source de données à la vue de table,
puis , pour chaque ligne, de lier nos éléments de source de données à chaque cellule de vue de table. Donc si on descend au bas de notre classe, on va commencer à enregistrer le nombre de lignes dans la section et tu vois que ça va se terminer
automatiquement pour nous. Et jetons un coup d'oeil à ce qui se passe dans cette fonction ah Signature ont été fournis une vue
de table et ont reçu une section. Et ce que nous devons revenir en arrière, c'est combien de roses appartiennent à cette section de la vue de table et ce que nous allons simplement fournir est de retourner le stock de la source de données, ce qui signifie haine. Il y a trois articles dans notre liste. Notre vue de table va contenir trois lignes. C' est exactement ce que cette méthode ici, il dit. Et c'est quelque chose que la table de vous doit avoir pour savoir combien de données il contient. Donc c'est facile. Nous pouvons simplement retourner le compte, et c'est tout ce que nous devons faire pour une table très simple de vous. La prochaine méthode que nous devons implémenter est la vente pour la ligne au chemin d'index, et ce que cette méthode fait est qu'elle renvoie une table de vous vendre pour chaque ligne de données qui est contenue dans notre tableau de sources de données. Donc, la méthode réelle ici, comme je commence à taper, est auto pour le chemin d'index de ligne et les retours. Vous je la table de vous vendre. Donc, si vous pouviez entrer, ils vont parler de la fonction pour nous et ensuite nous pourrons commencer à travailler dessus. Donc, regardant la signature de la méthode, nous avons une table de vous. Nous avons un chemin d'index et nous devons retourner une cellule de vue de table. Et donc ce qui finira par faire ici est de faire Voir la table une cellule est égale à la vue de table passée dans nous dot de que cellule réutilisable avec identificateur. Et je vais expliquer ce que cela signifie dans la seconde donc pour le chemin d'index et j'utiliserai le paramètre de
chemin d'index ici qui a été passé. Et vous verrez ici que lorsque nous regardons la vue de table, il est donc un type, et ce type est vous. I table view cell, qui est la classe de base pour une table que vous vendez. Et donc ce que nous allons faire ici, c'est nous allons retourner la table que vous vendez, mais nous devons comprendre dans quoi est exactement une cellule de vue de table U I. Le moyen le plus simple est toujours de commencer par aller dans la documentation Apple. Donc, si nous vous sélectionnons I tableau vue cellule et nous commandes cliquez sur. Il avait sauté à la définition. Nous sommes maintenant à l'intérieur de la documentation U I Kit pour la classe que vous voulez table que vous vendez, et si
nous regardons ici, nous pouvons voir qu'elle provient de vous, je vois que nous n'avons pas encore trop parlé, mais c'est la base vue de niveau pour la plupart de tous les types de vous que je contrôle. Et en regardant ici, nous pouvons voir quelques propriétés intéressantes. Il y a une image. Vous, il y a une étiquette de texte. Il y a une étiquette de texte détaillée, et il y a une vue de contenu, une vue d'
arrière-plan et quelques autres choses ici. Donc, les bits importants, notre intention et à nos fins, seront l'étiquette de texte, potentiellement le détail, étiquette de
texte et potentiellement la vue de l'image. Donc, tout de suite, nous allons utiliser la propriété d'étiquette de texte pour la lier réellement le titre de notre tâche à. Donc, revenons en arrière et commençons à implémenter cela maintenant et donc nous devons faire ici est comme nous
venons de voir une table de vous vendre ou vous je tableau Cell contient une étiquette de titre ou une
étiquette de texte . Et si nous voulons signer le texte, nous devons le faire pour une tâche particulière. Alors qu'est-ce qu'on sait ? ce moment ? Nous avons un chemin d'index, et heureusement, un chemin d'index contient une ligne, et chaque ligne correspond à une section ah dans notre tableau. Donc, la façon la plus simple de le faire serait de dire, source de
données au chemin d'index Ne pas rangée et ce que nous devons lier. Si on regarde ici,
on doit lier notre titre. Si on regarde ici, Le problème est que
nous avons défini notre titre comme privé, donc nous ne pouvons pas y accéder en dehors de cette classe. Et donc ce que nous pouvons faire est simplement supprimer privé pour le titre, qui le rend de type, interne et fertile signifie que la propriété peut être utilisée par le module entier, euh, ou fondamentalement tout, um, et privé signifie Il ne peut être utilisé que par le contenu à l'intérieur de la classe. Nous voulons toujours par défaut à privé parce que c'est une bonne pratique orteil Onley exposer
les propriétés à d'autres classes qui doivent être exposées. Nous ne voulons pas tout exposer car cela ouvre toujours des opportunités pour d'autres programmeurs de faire des erreurs. Quand ils commencent à utiliser notre code si nous leur donnons accès à toutes les propriétés ou méthodes de notre classe auxquelles ils pourraient ne pas avoir besoin d'accéder. C' est pourquoi nous avons par défaut privé jusqu'à ce que nous devions faire quelque chose d'un peu moins restauré, moins restrictif. Donc maintenant que c'est un type d'accès interne, si nous revenons ici, nous pouvons alors faire la source de données au chemin d'index dot ro dot title. Avant de tout exécuter, jetez un
oeil à la cellule qui signifie notre identifiant. Si nous revenons au story-board, allons l'amener ici et nous allons faire l'assistant éditeur et garder notre liste de choses à faire de votre contrôleur sur le côté droit ici. Et allons de l'avant et sélectionnez la liste à faire pour votre contrôleur de vue de table de contrôleur et recherchez la cellule de vue de table. Assurez-vous que vous l'avez sélectionné et allez à l'inspecteur d'adresses ici et vous verrez qu' il y a cette section ici pour la réutilisation. Identifiez l'air ici. Je vais utiliser le même nom que j'ai utilisé dans le code, qui sera juste vendre un nom très générique et regardons rapidement cette méthode ici . Et puisque nous avons la commande options, cliquez dans cette cellule réutilisable deaky avec identifiant. Faisons ça, lisons la documentation et voyons exactement ce qui se passe ici. Donc, il dit tout de suite que plus c'est une nouvelle méthode ridicule qui garantit qu'ils vendent, a été retourné et récite correctement. En supposant que l'identifiant est enregistré maintenant, il y en a aussi un autre au-dessus. Là, il transforme une cellule optionnelle de vue de tableau vous I qui est utilisée par le délégué pour acquérir une cellule
déjà allouée au lieu d'en allouer une nouvelle. Pour l'essentiel, en essayant de réutiliser un qui est en mémoire et, si ce n'est pas disponible, créant un nouveau, euh, dans ce cas. Mais nous utilisons cette méthode ici. Raison de celui qui ne retourne pas un optionnel et fondamentalement ce que ce dicton est que si nous
avons plus de types de cellules, nous allons les associer avec des identifiants différents donc je pourrais avoir une cellule pour peut-être, euh, vous savoir, une cellule de vue de table d'alimentation. J' en ai peut-être un pour un commentaire ou, vous savez, comme un ah, une cellule de vue de tableau publicitaire. Et cela pourrait donner à chacun de ces identifiants différents et je ne peux pas leur donner tous les mêmes identifiés parce qu'ils ont besoin de quelque chose qui dit de façon unique Celui-ci est un
type particulier de cellule par rapport à l'autre afin que je puisse de que le bon. C' est pourquoi nous voulons définir cet identificateur ici et aussi dans le storyboard pour le type de cellule pour l'identificateur ici et nous assurer qu'ils correspondent. Maintenant, allons de l'avant et menons notre projet pour voir à quoi tout ressemble jusqu'à maintenant et il semble que tout fonctionne. Je peux en avoir trois. J' ai trois éléments dans ma vue de table mes, euh, trois tâches que j'ai définies ici dans la source de données, et assez sûr, que tous apparaissent très bien dans notre vue de table.
7. Connexion du contrôleur de vue des détails: donc notre table de liste à faire fonctionne très bien. Mais nous voulons pouvoir transmettre ces données à notre vue détaillée ici. Et peut-être que nous voulons montrer plus d'informations ou avoir une mise en page différente pour chaque tâche de notre liste. Donc, pour l'instant, nous n'avons aucun moyen de passer de notre liste à notre vue détaillée en ce moment. Donc, ce que nous allons faire est d'aller de l'avant et de brancher la logique pour passer à l'écran de détail lorsque nous
sélectionnons une ligne particulière dans notre liste à faire. Et la façon la plus simple de le faire est de revenir au concept de Segways. Oh, créent une transition en Segway lors de la sélection de notre vue de liste à la vue détaillée, c'est assez simple. Ce que nous pouvons faire est si nous revenons sur une sélection notre pour faire contrôleur de vue de table liste, nous retournons dans le plan du document ici, nous voulons obtenir une prise de la cellule. Donc, avec l'auto-sélection, nous pourrions faire quelque chose de similaire. Là où nous maintenons la touche de contrôle enfoncée, nous cliquons et glissons sur le contrôleur de vue de détail et pour le type de Segway nous allons utiliser un spectacle. Et ici, vous verrez tout de suite que nous héritons de la barre de navigation du contrôleur de navigation qui encapsule SAR pour faire ce contrôleur de vue, qui a un bouton de retour pour revenir et cette connexion a été établie. Mais il y a encore une chose qu'il nous faut. Nous devons être en mesure d'envoyer les données ou essentiellement notre tâche, le test sélectionné d'ici à ici. Et en ce moment, même avec le Segway dit, nous n'avons aucun moyen de le faire. Et c'est quelque chose que nous allons devoir implémenter cela dans le code. On va devoir faire ça à deux endroits. Commençons d'abord par le contrôleur de vue de détail. Donc nous allons entrer dans le détail de votre fichier Controller Swift, et nous allons créer une propriété. On va juste appeler cette tâche Laura Task Type, et ce sera facultatif. Et ce que nous allons faire est la charge imputée, qui sera appelée à droite Lorsque nous entrons dans ce contrôleur do, nous allons juste imprimer le tasker d'impression. On va le déballer juste pour être en sécurité. Si la tâche est égale à la tâche d'impression de la tâche DOT Titre et nous ferons ensuite est de revenir à notre pour faire le contrôleur de vue de
table liste et, euh, eh bien, allez-y et implémentez une nouvelle méthode que nous n'avons pas encore vu, qui est appelé Préparer pour le Segway. Et c'est une méthode que nous allons remplacer. Si vous sélectionnez la méthode ici, laissez-moi voir si je peux tirer la documentation. Ça pourrait ne rien dire tout de suite, mais laissez-moi voir si on peut passer à la définition ici. On dirait que je ne peux pas le voir, mais ça s'appelle juste quand le Segway est sur le point de se produire. C' est donc le moment où si nous voulons transmettre des données aux prochains contrôleurs que nous allons voir, nous avons la possibilité de le faire ici. Si vous regardez les paramètres de cette méthode, vous avez le Segway réel, qui est un storyboard américain Segway. Et puis vous avez l'expéditeur, ou fondamentalement ce qui a envoyé l'appel ? Quel a été l'élément qui a invoqué pour nous toute cette chaîne d'opérations ? Ce sera le vous une table pour vous vendre parce que ce sera ce que l'utilisateur a sélectionné. Cela a commencé la transition pour le Segway. Et c'est pourquoi c'est le type peut être n'importe quel, parce que n'importe quel type possible pourrait être quelque chose qui a déclenché cela. Donc, nous devons le lancer, surtout quand nous savons que nous nous attendons à ce qu'une table de vos cellules cliquées ait
été sélectionnée que nous pouvons déballer et nous obtenir, puis obtenir le chemin d'index de nous-mêmes et ils obtiennent les données pour cette route particulière et ensuite envoyer que sur la destination faire contrôleur. Maintenant, le Segway a également une destination Segway propriété. Et vous pouvez voir ici que c'est un type. Vous avez votre contrôleur. Et c'est là qu'on va. Dans notre cas, ce serait contrôleur de vue détaillé, et c'est ainsi que nous allons transmettre les données. Donc, ce qui finira par faire ici, c'est le faire avec vous des choses. Um, si la cellule sélectionnée équivaut à l'expéditeur que vous je tableau voir la cellule. Et en fait, non, on y va. Il croit une déclaration des gardes ici parce que si on ne peut pas avoir ça, on ne se soucie pas de faire autre chose. Vous reviendrez simplement. Donc on va garder et on va laisser être sélectionnés. Selby, le centre comme un US capable de vous vendre si nous ne pouvons pas l'obtenir, nous avons renflouement en supposant que nous l'avons obtenu,
mais nous pouvons alors faire est de laisser le chemin d'index sélectionné égal à la vue de table, et nous utilisons la propriété de vue de table pour le de votre chemin d'index de points du contrôleur pour la cellule. Et nous allons faire est de passer dans la cellule sélectionnée. Et cette méthode essentiellement ah, méthode disponible sur la vue de table pour obtenir un chemin d'index. C' est une sorte de méthode pratique. Il y a quelques autres ici pour indexer le chemin pour la ligne à un chemin d'index de point particulier pour une cellule fourni une cellule particulière et des chemins d'index pour Rose dans un Tennessee dirigé dans l' avis ici que ces options retournent. Donc, nous devons également vérifier pour nous assurer que nous revenons sur le chemin d'index ici. Ou nous pourrions avoir un crash d'exécution si nous forçons à déballer quelque chose sans valeur. Donc nous ferons aussi un autre garde. Laissez vérifier ici garde, Laissez le chemin d'index sélectionné ne retourne pas. Et en supposant que tout cela a fonctionné, nous allons faire une vérification de plus ici, et ce sera, euh, accord, laissez la destination vous contrôler un contrôleur de vue diesel égal à destination point segway vous contrôleur comme type de détail, contrôleur de
vue et je vais en fait utiliser un if laisser ici. Hum encore, je suppose que ça n'aura pas vraiment d'importance, mais bien, nous pouvons faire l'un ou l'autre ou tourner à ce stade en supposant que tout s'est bien passé, Dites-vous, Controller Darks Task est égal. Donc maintenant, nous devons comprendre, OK, nous avons le chemin d'index sélectionné et le chemin d'index sélectionné a une propriété sur lui appelée Roe et cela nous donne réellement la ligne dans notre tableau pour où l'élément existe. Que si vous vous souvenez d'ici, c'est exactement ce qu'on a fait pour lier notre titre à une cellule. On a fait exactement la même chose. Nous utilisons la source de données au point de chemin d'index écrit pour obtenir cet élément, et nous allons le faire exactement la même chose ici et nous préparer pour Segway afin que nous puissions assigner la tâche pour nos invités sont contrôleur de vue détaillé basé sur l'index sélectionné chemin, ligne pour nous-mêmes et c'est tout. Alors allons de l'avant et construisons ceci et vérifions que nous construisons et il doit être le sélectionné son chemin qu'une fois de plus et tout va bien. Et maintenant une autre chose que nous pouvons faire ici, mais avant de courir. C' est, euh, un principe de base du débogage est,
ah, ah, concept d'utiliser des points de rupture. Parfois, si vous voulez parcourir votre code pour voir si les choses fonctionnent ou ne fonctionnent pas comme prévu, vous pouvez passer ici sur la barre latérale si vous n'avez pas vos numéros de ligne visibles. Ce que vous pouvez faire est d'entrer dans le code X dans les préférences, et je crois que c'est sous Voir ici. Où est-ce ? Sous les polices et les couleurs, modifier
le texte des numéros de ligne. Ainsi, sous l'édition de texte des numéros en ligne, vous pouvez parler tout cela sur et hors pour voir le numéro de ligne particulier où vous voulez un
point de rupture . Une fois que vos numéros de ligne ont été activés, vous pouvez aller ici sur cette colonne sur le côté gauche et cliquer dans un petit endroit de
points de rupture . Donc, une fois que cela se charge, nous pouvons voir le chemin d'exécution et tester les choses qu'ils fonctionnent comme nous les attendons. Alors maintenant, allons de l'avant et exécutons ceci dans le simulateur. Je vais aller de l'avant et choisir d'étudier la programmation. Et on dirait que notre Segway est terminé. Notre contrôleur de vue détaillé vient d'être invoqué. Vous avez fait le chargement a été appelé et maintenant nous vérifions que nous sommes en mesure de passer la tâche que nous déballer a réussi. Et bien sûr, le programme d'
études est imprimé sur la console. Nous avons donc passé avec succès notre tâche de notre liste de tâches à notre contrôleur de vue détaillé .
8. 7. Subclassing UitableViewCell: jusqu' à présent commence à se réunir. Mais nous devons encore faire quelques choses pour le rendre joli et comprendre quelques éléments plus communs pour le développement de l'interface utilisateur dans IOS. Mais pour nous lancer, nous voulons revenir au sujet de la sous-classe. Donc, évidemment, nous sous-classe Tara contrôleur de vue détaillée ici. Si vous vous souvenez, en affectant sa classe au contrôleur de vue de détail, et nous pouvons le faire avec beaucoup, beaucoup, beaucoup, beaucoup d'éléments dans les classes en particulier de l'Iowa de vous l'aimez et la classe suivante, nous voulons une sous-classe cela nous permettra d'en faire plus. La personnalisation est sur notre cellule de vue de table réelle. Donc, si nous allons par ici et nous élargissons notre table de liste à faire de votre contrôleur et de votre
cellule élue et que nous allons voir l'inspecteur de verre ici, vous pouvez voir que maintenant les classes que vous je vends n'ont pas été assignées . Elle n'a pas été sous-classée. n'y a aucun moyen que nous puissions vraiment modifier ou ajouter. tests sont des informations sur cette cellule, et c'est en fait quelque chose que nous voulons faire en ce moment. Donc, ce que nous allons faire est de revenir à l'endroit où notre code source se trouve dans le dossier du projet ou un
clic droit , et nous allons créer un nouveau fichier, et nous allons appeler ceci notre pour faire la vue de table auto. En fait, nous allons faire vue de la table des tâches donc un peu plus concis, ne cliquez pas, créer, et nous allons de l'avant et importer et le nécessaire Vous aimez, qui contient la cellule de vue de tableau. Et puis nous allons définir notre cellule de vue de table des tâches de classe, qui dérive de vous I cellule de vue de table et nous allons aller de l'avant et obtenir cette configuration juste comme
ça pour le moment. Et ce qu'on va faire ici, c'est retourner à notre storyboard. Et maintenant que nous avons créé une cellule de vue de table de tâches, nous pouvons alors nous sous-classer dans le fichier de storyboard réel. Donc, si nous avons nous-mêmes sélectionné et nous retournons à la classe ici, nous pouvons faire cellule de vue de table de tâches et nous avons entré là pour nous assurer qu'il sort. Et cette sous-classe vient d'être définie. Et une autre chose que nous pouvons faire ce qu'il y avait ici. Comme nous commençons à ajouter des fichiers plus rapides, nous voulons essayer de garder notre projet sympa et organisé. Donc, ce que je vais faire est de commencer à créer des dossiers et si vous faites un clic droit sur votre dossier de projet ici pour le nom de votre dossier Projets et aller dans un nouveau groupe. Mais vous pouvez faire est de commencer à créer des dossiers pour mettre ces morceaux de code source. Et donc affaiblir Dio, par
exemple, de vous contrôleurs. Et nous pouvons prendre notre contrôleur de vue détaillée et par décalage, tirant la touche Maj et en cliquant sur Semaine, puis sélectionnez à la fois le détail et la
table de liste à faire que vous contrôleur. Et nous pouvons ensuite les faire glisser dans ce dossier Controllers de vue et cela va les déplacer au
bon endroit là-bas. Et nous ferons aussi ici c'est que nous en ferons une autre pour une base de table de vous-mêmes. Donc, la table quelques cellules et nous allons nous prendre nous nous venons de créer il fera glisser cela dans le dossier de la table de vous-mêmes comme ça, et je vais faire une chose pour les modèles ou nos modèles de données. Donc étant deux modèles et nous pouvons lui prendre notre tâche et nous pouvons mettre ça là-dedans, et ensuite nous pouvons juste avoir un dossier général pour les utilitaires ou juste,
euh, euh, genre d'endroits où nous n'avons pas vraiment quelque chose de bien défini, mais il est utilisé dans d'autres endroits tels que la hauteur de nos tâches. J' allais créer un dossier appelé Utilitaire. Vous savez, mettez
juste le type de tâche là-dedans. Et il semble que nous avons tout organisé ici pour la plupart, avec notre code source. Vous pouvez également faire un clic droit sur le dossier et dio trier par nom si vous préférez alphabétique, et je vais en quelque sorte donner à tout un bon tri alphabétique de votre structure de projet. Ensuite, nous voulons nous concentrer sur le style, sont Taskked Cell. Et si vous revenez dans la liste des interviews, contrôleur
de vue de la table et que vous vous souvenez de ça ici quand nous étions Deke Ewing la cellule en le renvoyant. Nous affectons cette propriété d'étiquette de texte ici, qui lie le texte. Mais si vous retournez en arrière et regardez le storboard, ce n'est pas vraiment clair que quelque chose se passe. Vous devez déduire que cela se passe dans le code et être plutôt sympa si nous pouvions
représenter visuellement tout de notre storyboard ici afin que nous n'ayons pas à creuser le code pour voir ce qui se passe, et je peux juste regarder ceci jusqu'à ce que ça. Ok, il y a une étiquette ici. Il va y avoir un texte lié sur cette cellule. Je peux le déplacer, positionner, changer la police, la couleur, tout ainsi de suite et ainsi de suite. C' est donc la prochaine étape que nous voulons franchir. Et pour ce faire, il faudra quelques étapes. Um, si nous remarquons ici dans notre hiérarchie de vue sous table en nous-mêmes que nous avons cette vue de
contenu. Donc, disons, par
exemple, je voulais faire quelque chose comme juste changer la couleur de fond, que du blanc à autre chose, et je vais aller de l'avant et le changer en eso jaune maintenant vous pouvez voir que apparaît visuellement dans la vue du contenu de la cellule. Donc si on fait ça dans notre simulateur, on va aller de l'avant et voir ce qui ressemble à une cellule jaune. Et bien sûr, on a changé la couleur. Et si on veut changer la hauteur de la cellule ? Et si on veut que la cellule soit un peu plus grande ? Donc, à première vue, on pense qu'on peut simplement faire glisser ça vers le bas et, vous savez, faire plus grand. Il semble que cela fonctionne bien. Nous allons aller de l'avant et courir dans le simulateur et Ah, et nous verrons ce qui se passe dans un instant ici et regarderons ça. Ça n'a pas changé. Alors que se passe-t-il ici ? On doit diagnostiquer ça. Ah, il semble qu'il y ait un autre paramètre qui dépasse la hauteur de notre cellule, et c'est quelque chose que nous devons changer. Pour prendre en charge la hauteur désirée à partir du constructeur d'interface, revenez dans le contrôleur de vue de table de liste à faire. Et il y a une autre méthode ici que nous allons avoir besoin d'utiliser une autre méthode que nous devrons remplacer. Donc, si vous vous souvenez, nombre de lignes et de section était ce qui nous donne la quantité de données dans la table et le chemin d'index auto route nous donne une vue de table réelle. Bien vendre, il s'avère qu'il y a une autre méthode. Hauteur de la ligne au chemin d'index qui renvoie SCG float, et ce que nous voulons faire est de comprendre d'où cela vient et de comprendre ce qui se passe avec elle. Donc, si nous commandes cliquent sur le contrôleur de vue de table U I, nous pouvons voir qu'il y a ces deux protocoles Vous I table view Delegate Et vous I table view source de
données. Maintenant, vous n'êtes pas en mesure de sources de données d'où vient le nombre de lignes dans la section et le
chemin d'index auto route . Cependant, vous avez un délégué de vue de table contient d'autres éléments liés à la personnalisation de notre cellule et de la hauteur. Furrow est l'une des choses. Donc, si nous commençons à taper la hauteur pour la ligne au chemin d'index, vous pouvez le voir ici. C' est une des méthodes qu'on peut remplacer. Et il y a une très longue description reçue, liken show qui vient ici. Parfois, c'est le cas, parfois ce n'est pas le cas. Mais nous pouvons voir ici que c'est de là que vient réellement cette méthode. Et il semble que ça m'a amené à la version objective c de ce,
euh, euh, ap je hors de ce cadre, qui est très bien. Mais si vous faites défiler ici, il y a beaucoup d'autres méthodes que nous pouvons remplacer en plus de cela. Et donc je veux dire, il y a beaucoup de personnalisation affaiblir dio sur une table de vous, mais revenons en arrière et et juste pour clarifier une fois de plus, parce que notre contrôleur de vue de table est conforme à ces deux protocoles. Il nous permet de remplacer certaines méthodes pour faire la personnalisation dans nos propres contrôleurs de vue, qui est exactement ce que nous faisons dans le contrôleur de vue de table de liste à faire. Donc, si nous avons besoin de retourner une hauteur pour une vente, eh bien, alors nous avons probablement besoin de savoir ce que cette hauteur devrait être, Quelle devrait être la valeur numérique que nous avons retourné. Donc d'une façon, nous pouvons faire ça et correspondre à notre attente visuelle est que si nous retournons dans le storyboard ici et nous sélectionnons cette cellule et nous allons ici à cette icône qui ressemble à une règle l'inspecteur de taille, um, il a des attributs de hauteur de ligne ici que nous pouvons définir et glisser vers le
haut, vers le bas comme ça. Donc disons juste que je veux que cette route soit e ne sais pas, 145 et hauteur. Donc avec ce numéro, avec ce numéro fixé ici, c'est le nombre dont nous allons avoir besoin pour revenir en hauteur pour le chemin de l'index routier. Donc, ici, nous allons juste retourner 1 45 Maintenant, allons de l'avant et lançons ceci et voyons à quoi cela ressemble avec cette hauteur et parce que j'
ai besoin que je dois réellement mettre le mot clé de remplacement ici parce que nous écrasons cette méthode dans notre mise en œuvre. Alors faisons-le. Et donc on a notre taille maintenant, mais tu seras comme, Ok, eh bien, pourquoi c'est des trucs blancs qui se passent ? C' est quoi tout ça ? Et 11 autre astuce de débogage visuel que nous pouvons utiliser est qu'il y a une icône juste ici si vous voyez où mon curseur de souris est sur le code X. Et si nous cliquons qu'il nous emmène dans la hiérarchie de vue de notre application vivante. Et si nous commençons à cliquer ici, nous pouvons voir divers éléments de notre structure. Si nous développons ici sur la gauche, vous pouvez voir que les ennemis, notre contrôleur de vue. Et si on descend, il y a une vue de table et voici une cellule, et ainsi de suite et ainsi de suite. Et si nous
cliquons, nous pouvons voir
que c' est une table de vous étiqueter ici. On dirait que les étiquettes sont étirées et ça semble un peu étrange, non ? Alors nous retournons dans notre code, nous découvrons, OK, eh bien, où nous avons signé cette étiquette. Et pourquoi est-il étiré si haut ? Et nous voyons ici que c'est là que nous assignons notre texte à l'étiquette. Donc, nous allons juste le commenter et exécutons l'AP une fois de plus. Donc, cela va le construire frais et voir ce que cela change. Et maintenant, même si nous ne lions pas le texte, vous ne voyez plus cette étiquette blanche. Il a disparu parce qu'il n'a jamais été assigné. On va finir par utiliser notre propre étiquette. Nous n'allons pas utiliser l'étiquette par défaut réelle sur la cellule. Et au lieu de retourner juste un vous une table de vous vendre, nous allons retourner la cellule de type de tâche ou la cellule personnalisée que nous avons créée afin que nous puissions faire des clients asiatiques dessus à la place.
9. Présentation de la mise en page automatique: Alors commençons par ajouter nos propres étiquettes à notre vente bien à une étiquette pour titre. Et je pense que l'étiquette Lata pour la houle de type A commence. Donc, ce que nous pouvons faire ici, c'est commencer à descendre à la bibliothèque d'objets ici sur le
côté droit et commencer à taper l'étiquette. Et, euh, nous allons faire glisser une étiquette sur notre storyboard ici,
et, euh, euh, nous allons aller de l'avant et mettre en place cette mise en place et nous allons dio est bien traîné les coins ici pour augmenter le hauteur. Quel genre de fait sortir sur les bords ? Ces petites lignes pointillées sont des guides de mise en page qui vous disent où vous devriez arrêter. Dragon Beyonce parce que ce serait en dehors des,
vous savez,
les directives recommandées pour les directives de style d'interface utilisateur qu'il fournit pour Apple
. Dragon Beyonce parce que ce serait en dehors des, vous savez, les directives recommandées pour les directives de style d'interface utilisateur qu'il fournit pour Apple Mais ce qu'on peut faire ici, c'est essayer de mettre en place quelqu'un qui ressemble à ça. Et si vous allez à l'inspecteur des attributs, nous pourrions commencer à changer la taille de la police et le positionnement des couleurs afin que je puisse changer mon positionnement à partir de gauche Justified Teoh au centre. Je peux également changer ma police réelle si je le souhaite par défaut. C' est le plaisir de l'assistant. Mais si tu fais la coutume
ici, ici, on peut commencer à faire des choses différentes. Je pense que je vais essayer un autre orteil. Laisse-moi voir s'il y a quelque chose ici que j'aimerais utiliser. Ça a l'air bien. Ah, dio. En fait, je pense que je vais le garder et le vendre, tu peux maintenant ? Je ne vois pas vraiment quoi que ce soit qui m'intéresse. Je vais le changer en Ah, gras. Que diriez-vous de ça ? Um, c'est bon. Et je vais monter la taille juste un peu ici, et je pense que ça devrait être bon pour celui-là. Hum, et nous ferons aussi la même chose pour le genre, et nous allons juste aller de l'avant et mettre ce genre de choses juste en dessous. Donc on va faire glisser une autre étiquette. Et en fait, plutôt que de faire glisser une autre étiquette pourrait être plus facile de copier celle que nous avons. Fais le commandement, tu vois ? Et si vous déplacez votre curseur n'importe où sur votre cellule et obtenez des commandes V coller, nous pouvons coller celui que nous venons de copier. Et si on veut changer ça pour être, genre, un sous-titre comme un sous-titre au lieu d'un titre, on peut juste y aller. Et au lieu d'audacieux, fais-le Ah, voyons à quelle lumière il ressemble. Ouais, je suppose que je pourrais travailler. Um, vous obtenez ce set là et positionnez-le en conséquence. Donc une chose dont nous devons juste parler est ce qu'on appelle la mise en page automatique. Et c'est essentiellement un système de mise en page basé sur des contraintes qui nous permet de créer des
interfaces utilisateur adaptatives , interfaces qui répondront aux changements, tels que l'orientation de l'appareil ou le périphérique lui-même. Vous pourriez être en cours d'exécution sur un iPhone, SC, un iPhone sept plus et un iPhone 10. Il y a beaucoup de, ou même un iPad. Il y a beaucoup d'appareils et de tailles d'écran différents que nous devons considérer lorsque nous concevons notre APS, et c'est là que la mise en page automatique entre en jeu ici. Donc, si nous voulons comprendre quelque chose sur les contraintes, nous devons comprendre comment appliquer ces contraintes du storyboard ou du constructeur d' interface ? Et donc vous m'avez probablement vu à un moment donné faire des trucs ici avec peut-être horizontalement et verticalement et conteneur pour centrer les choses. Mais c'est là que nous commençons à entrer dans nos contraintes à partir d'ici. Donc, si nous sélectionnons, par
exemple, notre titre étiqueté et que nous descendons à cette petite icône ici pour ajouter de nouvelles contraintes, nous avons
également des options ici . Fondamentalement contraint. Êtes-vous élément ou notre étiquette à une certaine quantité de pixels ou de points loin du haut ? La gauche, la droite dans le fond, Ces air, également connu comme le côté d'attaque dans le côté de fuite, nous avons des contraintes d'ajouter un fixe avec la hauteur fixe réédition aspect. Il y a plein de choses ici avec lesquelles on peut bricoler. Et la mise en page automatique peut être frustrante parfois pour les nouveaux développeurs. Il faut un peu de temps pour le maîtriser et comprendre comment ajouter des contraintes qui n'entrent pas en conflit avec des contraintes et d'autres éléments. Donc, une chose pratique qu'Apple a ajouté est plus sur cette icône ici. Il existe un moyen de résoudre les problèmes de mise en page, et cela vous donne généralement un moyen de définir des contraintes suggérées afin que vous puissiez le faire
automatiquement définir des choses pour vous, Um, que vous n'avez peut-être pas été en mesure de comprendre par vous-même. Et quand auto laisser sélections ont été faites. Si vous allez ici, et que vous allez dans votre table. Si vous vendez votre vue de contenu, vous verrez maintenant que vous avez une petite section ici appelée contraintes, je dois développer que vous pouvez réellement voir chaque contrainte individuelle dans la collection de contraintes. Vous savez, vous avez la fin, le haut, le début et, euh, vous savez que vous pouvez Vous pouvez inspecter toutes les valeurs qui apparaissent dans l'attribut Inspecteur ici n'a même pas fait modifications à eux si vous le souhaitez. Mais ce que nous voulons faire, c'est le garder très basique. Donc ce qu'on va faire pour le nôtre, c'est qu'on va ajouter les nôtres manuellement. On ne va pas faire la façon préférée d'Apple. Donc on va choisir notre premier label. Nous allons descendre ici, et ce que nous allons faire est d'appliquer une contrainte supérieure, une contrainte gauche ou principale,
une contrainte de fin ou une contrainte de droite et une hauteur de 44 et d'ajouter quatre contraintes. Et maintenant,
fondamentalement, disaient que si notre cellule se développe en hauteur, sont les étiquettes vont essentiellement rester fixes et épinglées au sommet de cette cellule, Il ne va pas vraiment aller nulle part Maintenant, nous allons aller de l'avant et appliquer une logique similaire à notre étiquette de sous-titre ci-dessous. Nous allons le sélectionner, vous savez, revenir ici, et nous allons ajouter nos contraintes. Donc, au lieu de faire un sommet, je pense que nous allons essayer d'épingler celui-ci au bas de la cellule afin que nous puissions faire une
contrainte inférieure de zéro fin ou contrainte droite de zéro dans la contrainte de début ou de gauche de zéro dans une contrainte de masquer de 44. Donc ça va réparer la hauteur et le genre de broches qui se vendent au fond. Et si, jusqu'à présent, si bien. Um, nous-mêmes, on a l'air plutôt bien. Maintenant, allons de l'avant et exécutons ceci et voir à quoi il ressemble visuellement dans notre tableau de vous sur. Une chose que nous devrons faire ici est juste de nous assurer que vous avez commenté l'endroit où vous affectez votre texte ici. Sinon, cela va remplacer n'importe quoi. Nous avons fait un constructeur d'interface, Alors allons de l'avant et exécutons ceci dans le simulateur et C sans définir le texte. C' est ce que nous avons en quelque sorte. Nous avons notre étiquette de titre ici et sommes une étiquette de sous-titre ci-dessous et positionne exactement comment nous
les avons définis dans Interface builder. Et donc j'ai décidé. Eh bien, vous savez, je vois que j'ai mis mon étiquette en bas, mais je pense que ça a l'air un peu mieux si je la déplaçais un peu plus. Et donc nous pouvons le faire assez facilement. Si nous revenons ici à cette petite icône de règle pour l'inspecteur de taille et cliquez dessus, ce que nous pouvons faire est d'ajuster un peu l'axe Y en le déplaçant vers le bas. En fait, ça amène notre label. Donc si on commence à cliquer vers le bas, je pense que le mien était à 90 ans. Si on le ramène au lac 75, mes hommes pourraient avoir l'air un peu mieux. Tu verras que j'ai tous ces trucs d'orange ici. Et c'est en gros Apple qui me dit que, Hey, tu as un problème ici ? Vous avez dit que cette chose devient l'axe Y de 90. Tu viens d'emménager dans la 75. Qu' est-ce qui se passe ? Donc, donnez quelques options, vous pouvez mettre à jour les contraintes, ce qui signifie que vos contraintes, au lieu de s'attendre à être à 90, seront un 75 qui résoudra ce problème. Vous pouvez mettre à jour le cadre de votre étiquette pour qu'il corresponde aux contraintes. Maintenant, si nous l'avons fait, les contraintes sont à 90. Eh bien, on déplace tout à 75. Si nous mettons à jour le cadre pour qu'il corresponde à la contrainte, il se déplacera réellement. Sont étiquetés vers le bas à 90 s. Nous ne voulons pas que là où nous pouvons laisser Apple re calculer les contraintes entièrement sur le faire pour nous. Et donc nous ne voulons pas vraiment le faire parce que ce genre de choses va à l'encontre du but de ce que nous avons fait. Eso Une autre option est que vous pouvez faire ces changements ici une houle donc temps de revenir à la bouteille de résultat un problème que vous avez aussi que les options, vous mettez à jour la contrainte, Constance. C' est vraiment ce qu'on veut. Parce que si nous faisons
cela, il dit simplement que la contrainte de hey, s'attendre à ce que cette chose soit à 75 pas à 90 et alors vous verrez que cet avertissement vient disparaître. Et maintenant, lançons ceci et voyons à quoi ça ressemble. Et donc ça a l'air un peu mieux. Assez
bien pour ce qu'on veut faire en ce moment. Une autre chose que vous pourriez réaliser, c'est qu'il y a une ligne de séparation ici. Ce genre de look le fait maintenant que nous avons commencé à changer une partie du style et ce serait bien si nous pouvions désactiver cela et il s'avère que nous pouvons, c'est en fait une propriété de la vue de table. Donc, si nous revenons au storyboard et nous sélectionnons la vue de table ici, puis allons à l'inspecteur d'attributs ici, il y a une propriété appelée séparateur qu'il a dit à une valeur par défaut. Eso Ce que nous pouvons faire, c'est que nous pouvons transformer cela de défaut à zéro si nous choisissons de le faire. Et si on fait ça maintenant, voyons à quoi ça ressemble. Donc vous voyez maintenant que ce séparateur a complètement disparu, euh, disons que nous voulons ajouter notre propre, euh, séparateur, peut-être un peu plus épais qui semble un peu plus grand. On pourrait le faire à et encore. C' est une autre occasion de pratiquer l'utilisation de beaucoup de mise en page. Donc, au lieu d'une étiquette, ce qu'on va faire ici c'est te chercher, t'
avoir et c'est juste une vue simple comme ça. On va traîner ça dans la vue du contenu de nous-mêmes et on va essayer obtenir ici. Et ce qu'on va faire, c'est faire tout petit traîné. Je pense qu'une hauteur de ah, peut-être huit sera bon pour l'instant et de CV dans un peu parce que je suis assis dans ma piste. Je vais faire glisser les bords de cette vue jusqu'au bord de cette époque, pas aux directives
recommandées pour créer notre propre petite barre de séparation. Et ce que je vais faire ici n'est pas une position que je vais aller à quelques contraintes,
pour l' épingler en bas et fixer cette hauteur de façon similaire Donc ce qu'on a fait à cette
étiquette de sous-titre . Je vais faire une contrainte de zéro à la contrainte inférieure de zéro pour la droite ou la fin dans une contrainte de zéro pour la gauche ou le début et une hauteur de huit. Il s'agit de faire cet amour qui a été fixé là où on le veut. Et je vais aussi changer la couleur de cette vue pour autre chose que le blanc. Donc si j'arrive à l'inspecteur absolu ici, je pense que le noir aurait l'air plutôt bien. Voilà pour qu'on puisse le faire ressembler comme ça. Alors maintenant, nous allons lancer ceci une fois de plus et voir à quoi cela ressemble visuellement dans notre simulateur . Et donc peut-être que ce bar est un peu trop épais, donc c'est bon. Nous pouvons simplement aller et l'ajuster comme nous l'avons fait en mettant à jour nos contraintes en cours de route. Donc encore une fois, une autre occasion de pratiquer sur la mise en page. On peut laisser tomber ce serré de sept Teoh de huit à peut-être avant serait un peu mieux. Et vous remarquerez ici que mes petites vues de diviseur se sont déplacées vers le haut car j'ai diminué la hauteur . Donc nous allons vouloir orteil si nous diminuons la hauteur de quatre, nous ne le pousserions pas de quatre sur l'axe Y. Donc vous pouvez le faire d'ici si vous le voulez. Ou vous pouvez simplement essayer de le faire glisser vers le bas comme ça, et vous pouvez l'obtenir directement sur le bord là-bas, et vous aurez toujours cette orange parce que vous venez juste de faire des changements au cadre sans la mise à jour des contraintes. On doit juste y retourner et le faire. Nous l'avons déjà fait pour résoudre des problèmes connexes. Et nous allons mettre à jour la contrainte Constance pour qu'elle corresponde à la trame que nous venons d'ajuster et
voyons à quoi cela ressemble maintenant. Et je parie que ça a l'air un peu mieux et ce qu'on avait avant et, oui, je pense que c'est assez bon pour travailler avec. On pourrait peut-être aller un peu plus mince, mais ce n'est pas la fin du monde.
10. Tirer dans la cellule de table de table de travail: Donc maintenant, nous avons notre cellule conçue, mais nous devons quand même vous remplacer complètement. Je tableau voir la cellule dans le chemin d'index auto route pour utiliser notre table de tâches de vous vendre. Et donc nous devons le faire tout de suite. Revenons donc au contrôleur de vue de table Besoin de faire moins à la pointe de votre contrôleur. Et nous voulons revenir en arrière. Chemin de l'index routier ici. Et donc tout de suite. Hum, tu sais, si tu commences à taper la table de tes ventes, tu remarqueras que le genre est toi. Je te dépose ça ne marchera pas pour utiliser un cours de douane,
euh, euh, que nous avons créé, qui est la table des tâches que tu vendras. Donc, ce n'est vraiment pas un problème de ce que nous pouvons faire ici est, puisque notre cellule de vue de table de tâches est une table que vous vendez, nous pouvons simplement la lancer comme une table de tâches. Vous vendez, et nous le ferons. Voilà puisque ça va être un puits optionnel, juste faire un chèque. Donc, si la vue de table vend les gens de notre table de test vous-même, nous allons faire quelque chose de différent. Ce qu'on peut faire ici, c'est trouver un bar. Cellule égale que vous avez une table de vous-même afin que vous puissiez commencer par une nouvelle instance d'une cellule . Et si nous pouvons réellement éliminer ou sinon déclaration ici et si nous obtenons notre vue de table, vendre ici le type de cellule, ce sera une table de tâches vous-même. , Ce qu'on va faire ici,
c'est pour le retour technique, on va retourner la cellule, et ensuite on va le dire nous-mêmes. Les yeux sont table, vous vendez donc nous allons le faire là-bas. Nous allons supprimer ceci ici et maintenant. On dit qu'on va construire une nouvelle cellule parce qu'on ne peut pas revenir tant que la vente n'a pas demandé une valeur. Si nous sommes en mesure de faire la queue, vous êtes cellule comme une table de tâches de vous. Alors allez-y et attribuez cette vente ici et retournez-la. Mais il y a encore une chose qui nous manque. Nous devons configurer la cellule afin qu'elle puisse lier le modèle de données à la vue réelle pour mettre réellement les étiquettes pour le titre de la tâche et la catégorie de tâche. Nous n'avons pas encore écrit de code pour le faire. Eso ce qui affaiblir dio est si nous allons à notre table de tâches de vous vendre. Hum, nous n'avons rien implémenté ici, mais nous allons créer une nouvelle fonction. Donc, le téléphone configure avec la tâche et les paramètres va dans la tâche A, qui est le modèle de données. Et nous devons aller de l'avant et créer des prises de constructeur d'interface qui nous permettent de
relier nos étiquettes à la classe ici afin que nous puissions faire les liaisons lorsque nous recevons une configuration avec la tâche. Donc nous allons faire ici est d'ouvrir l'éditeur assistant. Donc j'ai pensé que ça s'ouvrait ici et on dirait que j'ai été trop éloigné de toi pour voir si je pouvais effondrer ce serveur un peu glissant. Et je vais parler de mon storyboard sur l'une des 10 douleurs ici. Et donc si nous allons dans ces cellules et nous développons la vue du contenu, nous pouvons voir que nous avons ces deux étiquettes le titre et il est intitulé Maintenant, puisque nous avons sous-classé cette cellule est chargée de la cellule de vue de table. Nous avons une connexion directe au fichier de code source afin que je puisse créer des
prises de constructeur d'interface tout de suite au code. Donc, ils maintiennent la touche de contrôle enfoncée, puis cliquez et faites glisser vers la cellule à l'intérieur de la classe. Et je libère je peux cuisiner une nouvelle connexion ici de type prise. Et depuis que j'ai sélectionné le premier label, j'allais appeler ce titre de tâche le label et connecté. Et je vais aussi faire la même chose pour le titre juste en dessous. Je vais maintenir
la touche de contrôle enfoncée . Cliquez et faites glisser ici. Il s'appelait cette tâche. Donc titre comme ça et puis allons-y. Et quand nous obtenons une tâche pour configurer notre cellule de vue de table, vous pouvez simplement faire dio titre de tâche Ce texte est égal à tâche le titre. Et donc nous avons un petit problème ici. Si vous commencez à taper un point de tâche, seul le titre est affiché. Et si vous vous souvenez pourquoi, nous ne montrons que le titre. A l'origine, quand nous avons utilisé la table de vous-même. Donc, pas un problème que nous devons faire est de retourner ici et d'exposer quelque chose d'autre de privé à interne afin que nous puissions y accéder en dehors de la classe sont la classe de tâches. Donc, pour ce faire, faites-le
simplement. Nous pouvons simplement supprimer privé du type et juste avoir laissé donc son interne, qui est la quantité de Maine interne. C' est vraiment ça, hum interne est les acteurs comme type d'accès Thea. Cependant, si vous ne spécifiez rien d'interne est la valeur par défaut, donc private est explicite. Interne est implicite à moins que vous le rendiez explicite en tapant interne. Donc juste quelque chose à retenir. Alors revenons maintenant. Nous avons combiné notre tâche. Sous-titre Donc, le texte du sous-titre de la tâche est égal au point de la tâche Et si vous ne voyez pas le type, faites commande soit de construire le projet afin que le pilote puisse prendre en charge la modification. Nous venons de faire le modificateur d'accès et vous devriez voir le type apparaître ici dans cette liste . Hum, donc tout de suite, on va avoir un petit problème ici. Le problème est que nous ne pouvons pas effectuer l'affectation car le type de tâche n'est pas une force. C' est juste littéralement dans le nom d'une tâche, tapez son propre type. Il y a deux façons de travailler. C'
est probablement le plus facile, va simplement convertir ceci en sa chaîne avec l'indium. Donc, si vous entrez dans votre type de tâche, ce que nous pouvons faire ici est de dire que cela va être une chaîne et affaiblir. Nous pouvons faire une sorte de chaîne ah valeur lisible pour chacun de ces cas afin que nous puissions au lieu d'étudier toutes les minuscules, nous pouvons dire étudier comme ceci, nous pouvons faire une valeur par défaut ici pour le travail autrement. Non, on peut faire un revêtement comme ça. Affaiblir dio La planification des vacances est comme ça. Donc c'est un peu plus lisible par l'homme quand on le lie à n'importe quel élément de vous. Donc, en revenant ici, euh, que parce que c'est un type de chaîne maintenant que nous pouvons faire, c'est nous avons combiné au Taif et nous avons combiné à la valeur brute, qui est la chaîne elle-même. Vous devrez peut-être faire commande soit de construire un projet ici eso qu'il compile avec succès. Mais voyez, une fois que je recommence à le taper après la compilation, j'ai une valeur brute, qui est une chaîne qui apparaît. Donc, Donc, ce que nous pouvons probablement faire ici, c'est changer parce que nous ne voulons pas indiquer ce type juste un peu plus lisible pour que nous puissions faire quelque chose comme ça. Affaiblir la bande dio, et puis nous pouvons injecter dans notre petit type de tâche comme ça a la bande, la valeur de l'
action Donc ça va tourner ça dans le simulateur, il voit à quoi ça ressemble. Mais en fait, avant qu'on puisse faire ça, j'ai failli oublier. Nous devons faire la configuration ici. Donc, la dernière étape va être proche. Notre assistant éditeur ici, table de vous vendez chiffre de pensée avec tâche, et ,
euh, cette tâche va être quelque chose que nous devons récupérer dans la source de données. Donc, ce que nous faisons ici est juste laisser ah, demandons la source de données égale au chemin d'index dot ro. Et si vous vous souvenez, je passais de cette façon avant, mais je reçois explicitement la tâche juste pour vous montrer que vous pouvez aussi le faire comme ça si vous voulez être un peu plus explicite, hum, puis en passant la tâche comme ça pour faire la configuration. Alors maintenant, allons le faire fonctionner. Et nous devrions avoir toutes nos fixations branchées avec le nouvel ajout de notre sous-titre lié à notre étiquette. Et bien sûr, vous pouvez voir que l'étude du codage du site de programmation, faire le travail de maison de type buanderie et de planification voyage en Espagne de type planification de vacances. Tout semble fonctionner
11. Construire le contrôleur de vues de créateur de tâches: maintenant, à ce stade du tutoriel, nous avons certainement fait beaucoup de progrès sur notre liste de vues de table. Mais le problème que nous avons actuellement, c'est que nous n'avons que trois éléments qui sont essentiellement codés en dur . Nous n'avons aucun moyen d'ajouter dynamiquement de nouvelles tâches à notre liste, et c'est quelque chose que nous allons corriger dans cette partie du tutoriel eso. Ce que nous pouvons faire ici, c'est que nous avons une barre de navigation. On peut ajouter un bouton plus en haut juste ici. Et fondamentalement, lorsque nous cliquons sur ce bouton plus, il va charger un autre contrôleur de vue. Cela va nous permettre d'entrer une nouvelle tâche de liste à faire dans le formulaire, puis nous pouvons l'enregistrer et charger directement dans notre liste de tâches automatiquement. Et donc le premier endroit pour commencer est de retour dans notre storyboard. Donc, ce que nous allons faire ici, c'est que nous allons revenir en arrière et descendre à la bibliothèque d'objets ici. n'est pas taper l'élément de bouton de barre, Cen'est pas taper l'élément de bouton de barre,
et c'est un type de bouton que nous pouvons ajouter à une barre de navigation ou une barre d'outils, et nous pouvons simplement le faire glisser ici en haut à gauche de l'angle supérieur droit, et cela nous donnera un bon bouton que nous pouvons utiliser à partir de ici. Et une fois que nous avons sélectionné notre bouton, vous remarquerez qu'il apparaît sous l'élément de navigation, les éléments du bouton de la barre
droite, puis l'élément réel ici. Et donc si nous passons à l'inspecteur des attributs, nous pouvons changer certains attributs à notre bouton. Par exemple. Peut-être qu'au lieu de ce style de sélection personnalisé, nous voulons faire une annonce qui changerait cette icône en icône plus, ce
qui est un peu logique pour ce que nous essayons de faire. Nous pouvons également changer la tentative du bleu par défaut pour peut-être quelque chose qui semble plus approprié pour notre thème, qui est jaune et noir. Donc je pourrais faire quelque chose comme ça aussi. Et une fois que nous avons fait cela, ce que nous voulons faire maintenant est de brancher l'action du constructeur d'interface pour lorsque ce bouton est
appuyé ou cliqué. Donc, si nous revenons en arrière et ouvrons l'éditeur assistant et que nous mettons notre storyboard d'un côté et notre contrôleur de vue de table de liste de l'autre côté, nous pouvons aller de l'avant et créer cette action. Donc, si nous allons en quelque sorte dans notre code ici, vous choisissez juste un endroit arbitraire et nous sélectionnons notre bouton. Si nous maintenons la touche de contrôle enfoncée, nous pouvons cliquer, puis faire glisser vers notre fichier et à partir du type de connexion de la sortie. Nous allons changer cela en action, et nous allons juste appeler ceci créer, ah, nouvelle tâche engagée et la connecter. Et donc vraiment, à ce stade, c'est où nous allons. Au lieu de cela, elle a mangé le nouveau contrôleur de vue que nous devons créer en le présentant totalement. Et une fois que cela est présenté, eh bien, entrez une nouvelle tâche dans ce contrôleur de vue enregistrez-le, puis rechargez automatiquement. Ce
jour-là, cette tâche mu dans notre liste. Maintenant, nous sommes prêts à créer notre contrôleur de vue. Alors revenez à la bibliothèque d'objets ici. Nous allons faire glisser un nouveau contrôleur de vue sur le canevas du storyboard, et ce sera notre contrôleur de vue créateur de tâches. , Ce que je vais faire ici,c'est que je vais juste le styliser jaune et un peu le même thème que nous avons suivi pour l'application. Vous pouvez choisir la couleur de fond que vous voulez utiliser, donc je vais juste la laisser comme ça pour l'instant. Et ce que je dois faire ensuite est en fait de créer le fichier de code source pour ce contrôleur de vue et de la même manière, tout comme nous l'avons fait avec les deux autres commencera par créer un nouveau fichier swift. Et nous appellerons ceci un contrôleur de vue créateur de tâche. Eh bien, alors allez-y et importez dans votre kit, qui contient la classe de contrôleur que vous avez vous. Et nous allons juste définir notre nouvelle classe en tant que créateur de tâches de classe. Peu de contrôleur de lecteurs fatigués de vous. Je vois le contrôleur et remplacerai la vue qui charge comme notre point d'entrée dans ce
contrôleur de vue eso. Ensuite, une fois que nous avons fait ça, hum, si votre éditeur assistant est ouvert ici, nous pouvons retourner et brancher, euh, le fichier de code source pour qu'il corresponde au nouveau contrôleur et constructeur d'interface. Donc, si nous avons sélectionné à votre avis, contrôleur, nous venons de créer nous allons à l'inspecteur de classe ici, nous pouvons aller de l'avant et trouver cela en tant que créateur de tâche de votre contrôleur et nous allons juste aller avant. Et c'est aussi que le storyboard i d et l'idée de restauration au cas où nous aurions besoin de faire quelque chose par programme plus tard. Et vraiment, ce qui affaiblit Dio est à partir d'ici sont un nouveau bouton plus. On peut aller de l'avant et faire une option de Mota Lee ici pour être sûr que le contrôleur de vue du
créateur de Newtown , euh, quand on met ce bouton. Alors allons de l'avant et testons cela dans le simulateur très vite et voyons à quoi cela ressemble. Et donc mes simulateurs s'ouvrent ici et j'appuie sur mon bouton plus et on y va. Donc, mon contrôleur de vue créateur de test se charge. Cependant, moment, nous n'avons aucun moyen de rejeter cela parce que nous n'avons pas de bouton de retour ou de bouton de sécurité. C' est donc la prochaine chose que nous devons implémenter est l'interface utilisateur pour le contrôleur de
vue du créateur de tâches .
12. Interface utilisateur du contrôleur de tâches de l'utilisateur de créateur de tâches: Donc, la prochaine chose que nous devons faire est de concevoir l'interface utilisateur pour un
contrôleur de vue de créateur de test . Avant de pouvoir le faire, nous devons voir quels éléments nous devons ajouter et qui sont nécessaires pour créer une tâche. Donc, si nous revenons au point de tâche rapide dans notre dossier modèles et que nous regardons notre
classe de tâches , nous pouvons voir que nous avons ajouté trois choses. Nous avons un titre, nous avons une date d'échéance et quand nous avons un type de tâche. Commençons donc par le plus facile qui sera le titre. Et ce que nous pouvons faire pour cela est glissé sur un champ de texte. Donc, si vous descendez au storyboard et dans le coin inférieur ici pour la bibliothèque d'objets, si vous tapez un champ de texte, faites glisser sur un champ de texte sur le storyboard, et ce sera notre champ de saisie pour notre titre de tâche, donc, ce que nous pouvons faire ici, c'est commencer à positionner ce, euh, là où nous voulions aller. Je vais juste l'avoir ici pour l'instant. Et la prochaine chose fera est de revenir en arrière et de brancher la sortie du constructeur d'interface pour notre champ de
texte ici dans notre contrôleur de vue. Alors revenez au créateur de tâche de votre contrôleur et juste au-dessus vous avez chargé ce que Weaken Dio est de créer cette connexion. Donc, en
maintenant la touche de contrôle enfoncée, nous pouvons cliquer et faire glisser dans le contrôleur de vue, et nous appelons simplement ce champ de texte de titre de tâche. Ensuite, nous allons aller de l'avant et ajouter deux autres champs de texte, Alors allons de l'avant et faites glisser sur deux autres. Donc Dragon Un ici et un autre ici et allait les traîner dehors. Donc, ils sont tous les mêmes avec faire la même chose pour le 3ème 1 Et la prochaine chose dont nous avons besoin est un bouton pour appeler réellement le processus de création d'une tâche. Donc, si nous commençons à taper pour le bouton, nous allons faire glisser sur le bouton réel qui vient ici pas le bouton de la barre, mais l'élément, mais juste un bouton. Donc, nous faisons glisser cela sur le storyboard, et nous pouvons faire ici est au lieu du bouton texte. On peut aller à l'inspecteur des attributs et taper, hum, créer une tâche, et vous pouvez faire glisser le ah dans la hauteur pour obtenir un bouton plus grand là-bas, et je vais changer la couleur de mon texte en noir. Je pourrais rester avec le thème de notre application. Et je vais aussi changer cette police de texte de coutume, je pense que je vais essayer quelque chose de différent. Hum, donc Helvetica nouveau est le genre là-bas, mais je vais voir à propos de Ah, mais j'ai installé ici Traven ici et on fera Ah, peut-être une pensée audacieuse ici. police plus lourde si on peut. Eh bien, c'est plus grand et juste pour cette taille de police accrue, faites glisser ça un peu plus. Donc maintenant, nous avons la plupart de nos contrôles d'entrée créés. La prochaine chose que nous pouvons ajouter à donner à ceci un peu plus poli est un nom comme fondamentalement un titre dans une façon de s'en sortir. Parce que nous n'avons aucun moyen de rejeter ce contrôleur de vue en ce moment. Donc, probablement le moyen le plus simple ici serait d'ajouter une barre de navigation. Et maintenant, vous remarquerez ici. Lorsque j'ai commencé à avoir une navigation, vous verrez le contrôleur de navigation et la barre de navigation. La principale différence est si vous vous souvenez dans les tutoriels précédents, est le contrôleur de navigation est une forme spéciale d'un contrôleur de vue qui vous fournit la barre de navigation. Cependant, c'est un contrôleur de vue que nous présentons Motive Lee. Nous ne sommes pas et avions parié cela dans un contrôleur de navigation en soi. Donc, quand on échange un Segway mobile comme on l'a fait ici, qui a le bouton plus qui emmène le Segway jusqu'au bout pour vous entendre vous rappeler qu'il vient du bas. Il n'est pas poussé sur la pile de la façon dont tout autre contrôleur de vue à l'intérieur d'un
contrôleur de navigation est fait. Mais nous pouvons encore simuler le même aspect avec la barre de navigation. Donc, si nous avons juste dragon barre de navigation sur notre contrôleur de vue, ce que nous pouvons faire ici, c'est ,
ah, commencer à créer quelque chose qui ressemble toujours. Mais il se comporte dans une présentation mobile. Donc, avec la barre de navigation traînée ici sur le dessus, eh bien, nous pouvons. Ensuite, faites est d'ajouter un bouton pour rejeter cela. Donc, si nous commençons à taper pour le bouton et mal orthographié, mais dans leurs fonctions, nous allons glisser sur une barre mais un élément sur le côté gauche de cette barre de navigation et ce que nous pouvons faire ici est si vous sélectionnez votre barre de navigation et que vous allez sur et ouvrez cette petit menu
latéral bas ici, enbas ici,
si vous jetez un oeil à la hiérarchie de vue pour la barre de navigation de contrôle a un titre, une barre de gauche, mais un élément ici avec un élément réel à l'intérieur de celui-ci. Donc, c'est en fait cet élément, et il a la possibilité d'ajouter également une barre de droite. Mais la nuit
, , si on devait juste traîner un autre objet ici, on pourrait créer un autre bouton. Mais on n'en a vraiment pas besoin pour celle-là. On a juste besoin d'un moyen de s'en sortir en le rejetant. Donc la gauche ici est assez bonne pour l'instant. Ce que nous pouvons faire, c'est commencer par changer le titre. Si vous sélectionnez le titre ici et que vous allez à l'inspecteur d'attributs, il a un texte par défaut définir le titre afin que nous puissions simplement appeler cette nouvelle tâche ou créer une nouvelle tâche. Voyons voir à quoi ça ressemble. Donc ça a l'air OK. Um et puis si nous voulons également changer le texte pour le bouton réel, si nous descendons à gauche éléments Barbara et puis sélectionnez l'élément réel, ce qui est le bouton. Nous pouvons aller ici et changer certains des attributs dans l'inspecteur d'attributs, donc vous verrez ici. Il le charge à l'avance avec le texte de l'élément sous le titre. Nous pouvons simplement changer le texte trop près, par
exemple, et vous verrez qu'il le met à jour ici. Une autre chose que nous pouvons faire est de changer la tente. Il y a le bleu est les tentes par défaut, mais si nous voulons garder notre thème et le changer pour la couleur de texte noir qui fonctionne à, il y a quelques autres options ici. Je crois qu'il y a une option faite, ce qui ne sont que quelques-unes des par défaut fournies par Apple. Euh, annule,
annule . Enregistrez certains d'entre eux que vous pouvez utiliser hors de la boîte si vous le souhaitez. Je vais annuler cela juste parce que je veux utiliser proche aussi il y a différents styles que vous pouvez utiliser bordure contre plan. Euh, ils ne montrent pas vraiment trop de changement visuel dans le storyboard, mais il y a juste quelques options différentes ici que vous pouvez changer donc et maintenant que nous avons la plupart de notre formulaire rempli, nous devons commencer à obtenir tout dans la bonne position. Plus précisément, nous voulons essayer de garder ces éléments de contrôle fixés quelqu'un au centre de la forme, mais nous devons le faire un peu plus élégamment. La raison pour laquelle nous devons nous soucier de notre mise en page est si vous sélectionnez votre contrôleur de vue et vous descendez en bas ici où il est dit voir comme et vous commencez à choisir différentes
tailles d'appareil . Par exemple, je suis sur l'iPhone huit. Mais si j'ai cliqué sur, disons simplement l'iPhone S c et vous revenez en arrière, vous pouvez voir que maintenant tous mes éléments ne sont pas centrés. La même chose ici. Si je descends aux quatre s, il semble encore pire si je monte à l'iPhone 10 ici. Ça a aussi l'air mauvais. Hum, et sur l'iPad, sera vraiment que ESO C'est un peu notre problème que nous voulons résoudre est comment construire une interface qui semble assez bonne sur nos tailles d'appareils, et c'est là que la mise en page automatique entre en jeu. Et plus précisément, nous pouvons utiliser ce qu'on appelle une pile de vous, qui gère beaucoup de l'empilement vertical ou horizontal des éléments qui sont disposés de la même manière. Un peu comme ça, et cela nous permet de ne pas avoir à mettre en œuvre les contraintes. Suman méticuleusement un constructeur d'interface. Il gère en quelque sorte une partie de la mise en page automatique pour nous ou le rend un peu plus facile sur DSO. C' est ce que nous allons faire ensuite est de créer notre vue de pile pour encapsuler fondamentalement ces éléments et les positionner verticalement. Il était honnêtement les centrer dans ce contrôleur de vue. Donc, ce que nous devons faire est de sélectionner tous nos éléments de contrôle en même temps. Une chose que vous pouvez faire est de faire glisser une boîte autour d'eux comme ceci, ou vous pouvez tirer vers le bas la touche Maj et cliquer chacun individuellement avec la touche de livraison enfoncée . Et c'est comme eux tous en même temps et ce que nous devons faire. Avant que nous ayons la vue de la pile, comme nous voulons dire que nous voulons utiliser pour être le même avec en haut qu'ils sont en ce
moment , nous ne voulons pas qu'ils changent, donc nous pouvons faire ici est de descendre à ce bouton et d'ajouter un avec sa contrainte d'avance, ce qui l'ajoute pour chaque contrôle sélectionné dans ce groupe. Maintenant, vous remarquez que tout est en rouge ici parce que nous avons fondamentalement des contraintes configurées qui ne sont pas assez d'informations pour la mise en page automatique pour savoir où placer ces choses. C' est pourquoi cela nous donne des erreurs ou des erreurs de contrainte. C' est très bien. On va arranger ça au fur et à mesure. Donc maintenant que sont à l'intérieur de la hauteur pour chacun est fixé. Nous pouvons les intégrer dans une vue de pile en appuyant sur ce bouton ici, et vous remarquerez qu'ils sont tous secoués ensemble. n'y a plus d'espacement vertical entre eux et ah, avec et la hauteur est toujours inchangée, qui est ce que nous voulons. Alors maintenant, je peux traîner autour de la pile pour toi. Et si vous regardez ici à l'intérieur du contrôleur de vue du créateur de tâches, ils développent la hiérarchie de vues. Vous pouvez voir que lorsque vous descendez, vous avez votre barre de navigation et je vous comprends. Et si vous l'agrandissez, vous voyez, tous nos éléments sont ajoutés à l'intérieur de celui-ci. Alors quoi ? Nous pouvons le faire ici, donc en fait sélectionner notre pile pour vous et sorte de position au centre ici et ce que nous
pouvons ensuite faire est de passer à l'inspecteur d'attributs ici et commencer à regarder certaines des propriétés pour notre vue de pile, et vous pouvez voir qu'il y a un axe qui est automatiquement mis verticalement car il est détecté qu'il y a un alignement. Et nous pouvons augmenter l'espacement vertical en appuyant sur ce bouton d'espacement vers le haut ou vers le bas pour créer un espace vertical entre ses éléments. De même, là où vous savez que vous pouvez modifier les options de distribution et d'alignement à partir de ces listes
déroulantes ici. Mais vous remarquerez qu'il y a encore un tas de rouge ah dans nos , guides de
contrainte, et vous verrez qu'il nous manque des contraintes pour quelques choses différentes. Exposition de la raison pour laquelle la position est inconnue pour tous les champs de texte du titre de tâche parce qu'en réalité, les seules contraintes qu'ils ont sur eux ou les limites de la hauteur que nous avons ajoutées. Nous n'avons pas encore ajouté de contraintes à notre pile, donc c'est ce que nous devons faire maintenant. Et le moyen le plus simple pour nous de censurer tout ici est de centrer horizontalement et
verticalement la pile nouvelle. Donc, si vous sélectionnez votre vue de pile à partir d'ici, qui la met en surbrillance ici et vous allez à ce bouton ici pour l'Aligner. Ce que nous allons faire est de sélectionner le horizontalement dans le conteneur et verticalement dans le conteneur et d'ajouter ces contraintes et vous verrez ici que c'est une sorte de positions qui le déplace un
peu vers le haut et ce que nous pouvons faire ici est d'essayer de faire glisser cela dehors. C' est donc le véritable centre de cet écran ici. Et il semble que j'ai un peu trop d'espace vertical entre mon élément. Donc je vais diminuer ça légèrement dans l'inspecteur des attributs ici, essayer d'avoir ce regard un peu plus propre. Tu sais, je pense à 20 ans. Ça devrait être bon. Euh, donc nous allons juste, vous savez, assurez-vous que c'est sympa et central là, et voyons ici si nous avons plus d'avertissements directs S o. Ceci est juste dire que le fixe avec des contraintes sur le bouton peut causer des problèmes d'écrêtage . Eso nous pouvons changer ceci ici ou cela peut être inutile afin que nous puissions supprimer cette contrainte juste parce que vous remarquez ici que le bouton est maintenant exactement le avec du texte dedans avec juste la contrainte de hauteur ici, Um, et si nous regardons en arrière nos avertissements, ils sont tous partis. Donc, nous avons résultat tous nos problèmes de contrainte de mise en page automatique que nous avions aussi à Nous devons fixer la barre de navigation au haut du contrôleur de vue parce qu'il n'y a pas de contraintes ajoutées à elle. Donc, comme la barre de navigation ici dans la hiérarchie, celle-ci est un peu plus facile que nous
pouvons faire, c'est de descendre, euh, le bouton des contraintes ici pour les nouvelles contraintes. Et nous allons juste épingler celui-ci en haut, à gauche ou à droite ou sur les bords de fuite et ajouter les
contraintes d'historique juste là et cela verrouillera cela en place. Donc maintenant, avec si nous allons et commençons à le regarder sur différentes tailles d'appareil, vous pouvez voir que si je sélectionne l'iPhone pour nous, nous avons l'air OK. Si nous allons regarder sur l'iPhone S e semble OK, et vérifions simplement les choses sur l'iPhone. 10 ont l'air bien ici, aussi. Ça a l'air bien. Regardons les huit. Jetons même un coup d'oeil à ce soir, et pour voir à quoi ça ressemblerait sur l'iPad. Et donc tout est centré et c'est exactement ce que nous voulons
13. Configurer les IBOutlets et IBActions pour le contrôleur de vues de l'éditeur de tâches: maintenant que nous avons tout mis en place, nous voulons aller de l'avant et commencer à se connecter, êtes vous des éléments et est en train de mettre en œuvre le rejet réel de ce contrôleur de vue lorsque le bouton de
fermeture est appuyé. Donc, ce que nous pouvons faire est de passer à la tâche de votre contrôleur ici, et nous allons tout garder côte à côte avec storyboard d'un côté et le code de l' autre, et nous allons commencer à accrocher nos contrôles. Donc, si nous allons dans le contrôleur ici, cette pile, que les créateurs de tâches de votre contrôleur, commençons par le bouton de fermeture afin que nous puissions aller de l'avant et que cela soit sélectionné ici. Et nous pouvons créer ça. Je suis action en ajoutant la touche de contrôle en maintenant la touche de contrôle, puis en cliquant et en faisant glisser. Et je vais mettre le mien sous la charge de vue. Mais à partir de la sortie va changer le type pour la connexion à l'action. Et on appellera ce bouton de fermeture tapé. Et pendant que nous y sommes, allons de l'avant et commençons à ajouter les autres, aussi. Nous commencerons par le champ de texte du titre, donc nous ferons la même chose. Wilken maintenez enfoncée la touche de contrôle, puis faites glisser et créer une connexion pour, um champ de texte de titre. Nous ferons la même chose pour tout le monde en dessous du champ de texte de type tâche et pour le texte final. Champ fera également le même champ de texte de date d'échéance d'approche, puis va enfin créer l'action supplémentaire ici pour créer la tâche si bien. Contrôle, touche et maintenez, cliquez et faites glisser dessus. Et puisque c'est un bouton, nous allons changer le type de connexion de prise en action, et nous allons juste appeler cette tâche de création conservée maintenant, qui
concerne l'implémentation du code ici, probablement la pièce la plus facile à implémenter. Juste nous contestons que tout fonctionne est le bouton de fermeture réel étant tapé lui-même. Eso Ce que nous pouvons faire ici, c'est lorsque le bouton de fermeture est tapé pour réellement fermer le contrôleur de vue ou pour le rejeter. C' est simplement cette ligne de code appelée dismiss. Donc, sur le bouton de fermeture méthode de robinet Will tapera dans Smith et vous verrez ici que la description dit rejette le contrôleur de vue qui a été présenté Motor Lee par le
contrôleur de vue . Donc, celui qui aurait présenté ceci était son contrôleur de vue table liste do do on bat
va être rejeté une fois que nous avons appuyé sur ce bouton ici. Donc, tout ensemble animé vrai. Et il y a un gestionnaire d'achèvement pour quand le rejet est fait que fondamentalement c'est un
rappel disant qu'il est terminé que son missile. Mais nous ne ferons rien là-bas pour pouvoir passer en néant, puisque c'est un paramètre facultatif. Et maintenant, allons de l'avant et exécutons cela dans le simulateur et voyons à quoi il ressemble. Je vais juste passer à mon iPhone en mer et commencer ça ici et voyons ce qu'on a. Donc mes simulateurs s'ouvrent maintenant, et je vais aller de l'avant et appuyer sur le bouton plus pour créer une nouvelle tâche. Et vous pouvez voir ici que mon, euh, menu arrive et, ah, si j'ai mes vêtements, mais ici rejette le contrôleur de vue qui remonte,
Um , ça revient tout de suite. Donc, maintenant que nous pouvons rejeter sont présentés contrôleur de vue créateur de tâches, la prochaine chose que nous allons vouloir faire est de commencer à configurer les champs de texte. Eso commençant par le champ de texte du titre. Nous voulons nous assurer que lorsque nous cliquons ou tapons sur le champ de texte, nous sommes en mesure afficher le clavier simulé ou le clavier logiciel, puis être en mesure de taper certains textes, appuyer sur la touche de retour, puis avec succès rejeté le clavier eso pour commencer avec cela,
Ce que nous allons faire ici est à l'intérieur d'une tâche Creator view controller va créer une nouvelle fonction
ici et nous allons appeler ce funk privé configure champs de texte. Et lorsque la charge visualisée est appelée bien, appelez
effectivement cette méthode pour commencer à configurer nos champs de texte. Et ce qu'on va devoir faire ici, c'est configurer le délégué du champ de texte. Donc, si vous vous souvenez du contrôleur de vue de table, euh, pour notre contrôleur de vue de table liste, revenons en arrière et jetons un coup d'oeil à quelque chose là-dedans. On va rentrer, revisiter le concept de délégués et de délégation. Onda implémente en fait manuellement un délégué en quelques instants ici. Donc, si nous revenons ici et nous cliquons sur le contrôleur de vue de table U I, vous vous souviendrez que nous avions au I délégué vue de table. Maintenant, nous n'avons pas eu à faire quoi que ce soit parce que le contrôleur de vue de table implémente automatiquement cela pour nous. Mais c'est un protocole, et de même, si vous cliquez sur une commande en cliquant sur vous, je champ de texte et en sautant à la définition ici. Il a aussi un délégué. Donc, si nous recherchons délégué, il y a un délégué de champ de texte vous I. Et si nous regardons ce qui est défini dans ce protocole, il a toutes les méthodes qui vont être appelées une notification pour quand différentes choses avec le champ de texte se sont produites, comme lorsque l'édition commence, le l'édition se termine, la touche retour a été pressée, ce qui nous donne tous les points de tir pour faire certaines choses que nous devons faire avec notre clavier et le rejeter et quoi de ne pas ? Hum et donc comment nous allons de l'avant et mettre en œuvre le délégué est assez simple. Nous allons faire est de revenir à notre créateur de tâches de votre contrôleur ici et à l'intérieur de notre méthode de configuration des champs de
texte. Nous allons commencer par le champ de texte titre, et il a la propriété dot delegate et dira que le délégué pour ce champ de texte
va être égal à soi et soi signifie simplement le contrôleur de vue créateur de tâche. C' est la classe qui était à l'intérieur. Donc, ce que nous disons vraiment, c'est que notre contrôleur de vue de créateur de test va être le délégué pour n'importe quoi pour les champs de texte U I dans cette classe. Donc, chaque fois que les choses changent, euh, les interactions de champ de
texte se produisent ces tâches ou ces notifications ou, euh rappels seront relayés au contrôleur de vue du créateur de tâches qui est l'acteur délégué. Et donc la façon d'implémenter les méthodes ici parce que vous pouvez voir que je reçois
déjà une erreur qui dit que je ne peux pas attribuer cette valeur est encore parce que le contrôleur de
vue du créateur de tâches doit se conformer au protocole. Vous, je délégué textuel. Et donc ce que nous pouvons faire est de créer une extension sur le contrôleur de vue du créateur de tâches qui est conforme au protocole. Vous je délégué champ texte et suppose que je le fais. Vous allez voir que cette erreur va disparaître maintenant. Pourquoi ai-je fait cela dans l'extension ? Eh bien, j'aurais pu aussi facilement le faire ici. J' aurais pu vous faire je délégué textuel, mais a une bonne pratique, surtout pour rapide. Il est très commun d'envelopper votre protocole, conformité ou vos implémentations à l'intérieur d'une extension sur tout ce que vous travaillez pour garder les responsabilités séparées afin que je puisse gérer toutes les
méthodes de délégué du champ de texte U I à l'intérieur de cette extension. C' est séparé de toute la corelogique qui se passe ici dans le contrôleur de vue, quelque sorte les garder isolés et simplement en gardant les choses modulaires. Et vous savez, c'est une séparation des préoccupations juste est une bonne pratique pour une programmation
rapide
et rapide, et je moins maintenant nous devons trouver quelles méthodes ici avons-nous besoin de mettre en œuvre ? Parce que encore une fois, si nous revenons en arrière et regardons le délégué du champ de texte, à
peu près tout ici est facultatif. Ce qui signifie que nous n'avons pas à mettre en œuvre ces affaiblissement juste en conformité avec le protocole comme je l'ai fait et ne rien faire si nous le voulions. Mais même si c'est inutile, nous avons la possibilité d'implémenter l'un ou l'autre d'entre eux, selon ce que nous essayons de faire. Donc l'évidence dont nous avons absolument besoin est Text Field devrait revenir, et nous allons retourner vrai ici et analyser ce que fait cette méthode et pourquoi nous en avons besoin sur DSO. Ce qui se passe ici, c'est que Miss a même mis la documentation en sélectionnant cette méthode, et si je passe du côté droit ici, parfois il ne la montre pas tout de suite et code ex. Mais voir si je peux sauter à la définition de ça ici, hum, voir ici sauter Teoh. Donc, il dit qu'il est appelé lorsque la touche de retour est pressée. Retourner no pour l'ignorer, et il fournit le champ de texte avec lequel il a été interagi. Donc, si j'ai cliqué sur le champ de texte du titre et que j'appuie sur la touche de retour, ce champ de texte serait techniquement le champ de texte du titre. Même chose pour la date d'échéance. Même chose pour le champ de texte de type tâche. Et donc si je veux rejeter ce clavier,
tout ce que je ferai est de dire sur ce champ de texte fourni à partir de cette méthode déléguée. Démissionner du premier répondant, et c'est essentiellement dire que démissionner de l'élément qui est en cours de mise au point en
ce moment et le rejeter , qui à ce stade serait le clavier. Et la documentation peut probablement l'expliquer mieux que je ne peux, où elle dit qu'elle notifie cet objet qui a été demandé de renoncer à son statut premier répondant dans sa fenêtre sur DSO. Maintenant, si on va faire ça dans un simulateur, voyons à quoi ça va ressembler. Donc mes simulateurs s'ouvrent ici, je vais aller dans le contrôleur de vue du créateur de tâches, et je dois m'assurer que mon clavier est allumé ici parce que,
euh, ok, ok, dirait que c'est le cas. Mais maintenant, si j'appuie sur la touche retour, voir comment il le rejette ? Donc, je clique sur le clavier vient vers le haut la touche de retour pour faire des affaires. Maintenant, si j'essaie la même chose pour les deux autres champs de texte, voyez, ce n'est pas ce qui ne rejette pas. La raison pour laquelle il ne rejette pas est que j'ai conçu le délégué pour celui-ci, ce qui signifie que le rappel pour rejeter son retour que vous êtes fondamentalement licencié. Le clavier ne se déclenchera pas pour les deux autres champs de texte jusqu'à ce que j'ai également affecté le délégué la même façon que j'ai fait le champ de texte de titre. Et c'est quelque chose que nous devons encore faire ici dans une autre chose, aussi. Si vous ne voyez pas sur le simulateur votre clavier à venir parce que c'est un paramètre, vous devez activer aller au matériel, chercher le clavier et vous assurer que vous avez basculé clavier logiciel comme le mien fonctionnait, mais il devrait ont été ah, nous y retournons et nous assurons que, euh bien, Ok, vous allez aller de l'avant et dire ça pour vous assurer que vous pouvez le basculer. Maintenant, allons de l'avant et faisons la même chose pour les deux autres champs de texte et assignons leurs délégués afin que nous puissions revenir directement dans cette méthode de configuration ici et aller à la date d'échéance. délégué de champ de texte est égal à soi et champ de texte de type tâche, pas délégué est égal à soi. Maintenant, continuons à courir dans le simulateur une fois de plus et voyons si nous pouvions rejeter les claviers pour ces trois champs de texte maintenant. Donc, en allant dans le contrôleur de vue créer un nouveau tâche, si je descends à l'autre champ de texte ici et appuyez sur la touche de retour, vous pouvez voir qu'il rejette. C' est non. Si je descends ici dans le 3ème 1 touche la clé de retour, vous pourriez voir qu'il rejette aussi. Donc tous ces air fonctionnent maintenant correctement en raison de l'accrochage des délégués pour chacun d' eux. Maintenant, jetons un coup d'oeil à certains des attributs d'un champ de texte vous, alors revenez au créateur de tâche de votre contrôleur et sélectionnez l'un de vos champs de texte et passez à l'inspecteur absolu ici. Et jetons un coup d'oeil à certaines des propriétés que nous avons disponibles. Donc, en plus du texte, couleur et la police, nous pouvons également changer, comme la position du texte aligné à gauche centre Landry le lion justifié. Donc, nous voulons probablement que notre texte soit centré juste parce qu'il va juste visuellement paraître plus attrayant. Hum, et il y a aussi cette option ici pour le texte réservé. Maintenant, le texte de l'
espace réservé est fondamentalement une invite à mourir l'utilisateur à leur dire quel type de texte ou quelles informations devraient être mis dans le champ. Donc ah, bon exemple d'espace réservé ici serait Enter le titre de la tâche et généralement cela utilisé pour montrer le générateur
d'interface ouverte . Je ne sais pas pourquoi ce n'est plus le cas. Ah, on le verra quand on l'exécutera. Mais cela apparaissait aussi ici aussi bien dans les anciennes versions de X bon, hum et ah, écoutons revenir à ce 1er 1 ici. Vous pouvez également modifier le style de la bordure si vous le souhaitez, sorte que vous avez une bordure claire type de bordure rectangulaire avec un contour noir, bordure
encastrée. Ce genre de semble être encastré vers l'intérieur, puis celui par défaut, qui est celui arrondi que nous avons déjà utilisé. Il y a beaucoup d'autres propriétés ici aussi. Un autre intéressant est le type de clavier, les claviers par défaut. Ce que vous avez vu, où nous avions les lettres et les chiffres. Mais vous pouvez également le changer pour être juste un pavé numérique ou un pavé téléphonique. Um, s donc c'est une façon que vous pouvez le définir depuis l'intérieur de l'interface Builder. y a beaucoup de choses. Beaucoup d'options, en particulier la clé de retour. Vous pouvez changer la clé de retour à quelque chose d'autre tel est fait ou suivant, ou l'une de ces options disponibles au lieu de juste retourner. Et il y a aussi un clavier. Regarde, il y en a un sombre, un léger. Alors, euh, essayons. Changeons le nôtre. Trop sombre pour voir à quoi ça ressemble. Euh, aussi deux. Nous voulons probablement définir les deux autres champs de texte pour avoir le même style si inquiétant que le clavier semble trop sombre pour le, um, milieu et le clavier. Cherchez l'obscurité pour le 3ème 1 Aussi pour avoir une annonce, le texte de l'espace réservé pour celui-ci. Donc je pense que nous allons probablement dio type de tâche ici. Donc, pour le texte de l'espace réservé va faire entrer la bande de tâche et pour le 3ème 1 ici va faire Entrer date d'échéance de la
tâche Et maintenant, allons de l'avant et exécutons cela dans le simulateur et voir à quoi il
ressemble . Donc les simulateurs s'ouvrent ici et ah, j'ai mon titre de tâche ici et c'est ce que le noir ah, clavier. Et il semble que j'ai oublié de centrer le texte sur le deuxième et le 3e 1 mais pas de soucis. Affaiblir. Faites-le très vite. Vous remarquez ici que c'est le clavier à thème sombre, et vous verrez ici le texte de l'espace réservé. Et lorsque je commence à entrer du texte comme une nouvelle tâche, le texte de l'espace réservé disparaît. Si je supprime mon texte, le texte de l'espace réservé revient. Euh, et je vais juste arranger mes autres. Vous les champs de texte très rapidement en entrant leur alignement. Et maintenant, ça ressemble à la 1ère
14. Présentation de the: Donc, maintenant, nous devons terminer la collecte de l'entrée de l'utilisateur à partir de nos champs de texte, puis créer une nouvelle tâche en rejetant le contrôleur de vue et pour sélectionner les éléments d'une liste. IOS n'a pas vraiment le concept d'un menu déroulant comme vous l'avez probablement vu dans Web APS ou même une application Android. Ce que nous avons à la place est la vue du sélecteur de vous, et cela permet à un utilisateur de faire une sélection dans une liste à base de plantes défilantes plutôt que d'avoir à
entrer des données à partir de zéro comme ils le feraient. Tout champ de texte blanc et le champ de texte de date d'échéance dans ce champ de texte de type maison vont avoir
besoin de vous. Je choisis des critiques pour la sélection, alors jetons un coup d'oeil au champ de texte U I. Plus en profondeur, allez de l'avant et commandes. Cliquez dans le champ de texte pour passer à la définition et rechercher la vue d'entrée dans la classe de
champ de texte U I . Et cela va être la vue qui est présentée lorsque le champ de texte est tapé ou se met au point
dans la chaîne des répondeurs. Et essentiellement, cela va faire apparaître une vue de sélection U I que nous allons configurer avec nos types de tâches ou dates d'
échéance. Et puis, une fois qu'un utilisateur fait une sélection, se
souviendra de ce qu'ils ont sélectionné. Et ce seront les données qui entreront dans la création de la nouvelle tâche. Revenons donc dans notre contrôleur de vue pour le créateur de tâche et commençons à obtenir cette
configuration . Donc la première chose que nous allons faire est de commencer par créer une nouvelle propriété, et nous allons appeler cette date d'échéance du bar privé ou une photo de vous. Ça va être un type que je vais chercher. Nous allons aller de l'avant et déclarer cela facultatif car nous devons d'abord le configurer. Donc, ce que nous allons faire ici est à l'intérieur des méthodes de champ de texte de configuration, euh, sont dans pour vos champs de texte. Non pas que nous allons aller de l'avant et configurer cela afin que nous allons faire le sélecteur de type de tâche View est égal à vous. J' ai une photo de toi pour en créer une nouvelle instance et ce qu'on va faire ensuite. Puisque nous allons commencer par le type de tâche, le champ de texte de type de tâche devant vous sera égal à la vue du sélecteur de type de tâche. Et maintenant, nous allons ah commandes Cliquez sur vous. Je choisis, passe revue et touche sauter à la définition et jette un oeil à cette classe et voir ce qu'elle est. Donc tout de suite, nous pouvons voir ici regarder la chaîne d'héritage que vous je choisis examen dérive d'un u que je vois. Et c'est la raison pour laquelle nous avons été en mesure de l'attribuer comme entrée de vous parce qu'en fin de compte, il hérite de tous les vous. J' ai utilisé des propriétés et dans la chaîne d'héritage ici. Maintenant, pour l'examen je choisis lui-même, il a ses propres composants et personnalisations ici et vraiment deux choses importantes à prendre note de notre délégué dans la source de données. C' est comme nous l'avons fait avec le délégué du champ de texte U I. Nous allons implémenter le délégué dans la source de données manuellement dans notre
contrôleur de vue de créateur de tâches eso Allons de l'avant et commençons à travailler sur cela maintenant. Hum, donc nous sommes déjà allés de l'avant et assignons la vue d'entrée ici, mais la prochaine chose que nous devons faire est de configurer le délégué dans la source de données. Donc, ce que nous allons faire est un champ de texte de type tâche. Je suis désolé. Type de tâche vue Sélecteur Démarrer délégué égal auto et type de tâche Sélecteur vue source de données Equal , self, et nous allons obtenir un air de compilation assez rapidement ici parce que nous n'avons pas conformé créateur de
tâche de vous à ces protocoles sur, comme nous l'avons fait ici au délégué de terrain U. S. S.
X. Nous allons faire exactement la même chose pour la vue du sélecteur, donc nous allons aller de l'avant et créer une autre extension ici. Extension sur la tâche Créateur. Vous pouvez supporter qu'il va se conformer à deux choses va se conformer à la source de données de vue U I. Picker dans les protocoles de délégation de vue du sélecteur U I et, ah, le obligatoire que nous devons implémenter est la source de données. Et alors, allons de l'avant et commandes. Cliquez dessus, sautez la définition et voyez ce que nous devons faire dans celui-ci dans celui-ci. Voir ici vous je sélecteur voir la source de données Parfois X code,
euh, euh, casse lorsque vous les commandes cliquent dans les choses. Donc, e a trouvé le protocole ici, et les deux choses que nous devons implémenter qui ne sont pas facultatives sont le nombre de lignes et le composant et le nombre de composants. Et donc c'est assez basique, non ? , Même ici, si vous n'êtes pas sûr de ce qu'est un composant, c'est essentiellement une colonne de données évolutives, et nous verrons assez rapidement une fois que nous aurons ce branché afin que nous puissions commencer avec ça dès maintenant . Alors commençons à taper le nombre de lignes composant, et nous allons juste retourner zéro pour le moment et un certain nombre de composants, qui pour le moment nous allons juste tourner un maintenant,
Jusqu'à présent, si bon Cela nous fera passer la erreur de compilation que nous aurions eu ici. Mais nous devons encore aller de l'avant et construire réellement le tableau ou la source de données qui
va être alimenté pour fondamentalement cette image de vous. Et donc si nous revenons ici,
euh, euh, puisque ce sont tous des types de tâches, ce que nous pouvons faire est de créer un tableau privé. Donc privé, allons les types de tâches, vous savez, nous avons juste ces types étant chaîne savent réellement ce que nous allons faire. Type de tâche ? Eh bien, j' achète la valeur de la chaîne. Hum, et ça va être égal à tâche ou à point codage J'ai un point de planification des vacances à étudier dans cette maison le travail pour tous les types de tâches que nous soutenons. Et maintenant cela va être notre source de données qui contient quatre éléments où les quatre tâches
différentes disponibles pour nous et c'est que nous allons faire ici est de revenir dans le nombre de lignes et nous allons retourner la source de données ou les bandes de type tâche que comte. Et donc tout de suite, c'est dire que nous devrions avoir quatre éléments sont en image de vous parce qu'il y a quatre éléments dans la source de données elle-même. Maintenant que les sources de données se sont connectées, explorons réellement le vous. J' imagine votre délégué et je vois ce qu'il y a ici. Donc, si nous commandons cliquer dessus et sauté une définition quand nous vous cherchons, j'ai choisi son délégué de vue. Nous pouvons trouver le protocole ici, et nous remarquerons que beaucoup de choses ici en quelque sorte liées à la pourrait la
configuration visuelle du contrôle comme le avec pour un composant, la hauteur de ligne pour le composant, le titre de la ligne, euh, la vue de la ligne. Et puis si vous avez fait une sélection sur une rangée, tout l'air disponible ici. Donc ceux que nous allons avoir besoin de notre ligne sélectionnée et le titre pour la route. On va mettre en œuvre ces méthodes en ce moment. Revenons donc à notre contrôleur de vue ici et commençons à travailler sur le donc nous avons géré cette particule. Maintenant, nous sommes sur le point de commencer à gérer ce protocole. Donc, si vous commencez à taper le titre pour la ligne, vous récupérerez le titre pour la méthode du composant routier. Ici, Noser renvoie une force facultative. En outre, si vous commencez à taper, a sélectionné, vous reviendrez. Il a sélectionné la ligne et le composant, et nous allons également l'implémenter. Donc, nous savons quand une sélection a été faite et obtenir l'élément sélectionné de l'utilisateur. Ce qu'il faut faire ici, c'est ce qu'on nous donne ? On a donné une photo de vous on a donné la ligne réelle et on a donné le composant réel, ce qui dans notre cas, il n'y a qu'un seul composant pour en ce moment. Donc vraiment, tout ce dont nous avons besoin, c'est la ligne pour comprendre ce qu'ils ont sélectionné. Donc, nous pouvons dire que laisser la tâche sélectionnée égale les types de tâche à la ligne sélectionnée. Et puis quoi ? Affaiblir Dio est retour Tâche sélectionnée et j'ai mal orthographié. Correction de cette tâche sélectionnée renvoie la valeur brute du point de tâche sélectionné ou la valeur de chaîne de R E newme pour la tâche. Et maintenant, nous avons tout branché pour voir à quoi ça ressemblera. Allons de l'avant et lançons cela dans le simulateur et jetons un coup d'œil à ce que nous avons jusqu'à présent. Donc, de retour dans le contrôleur de vue du créateur de tâches ici. Si je vais de l'avant et que je sélectionne le type de tâche en cliquant dessus, vous verrez Voici une photo de vous. Maintenant, nous avons les tâches réellement sélectionnables que nous pouvons faire défiler, comme les tâches ménagères, les
études, études, planification des
vacances et le codage. Euh, et cependant, il n'y a aucun moyen de rejeter ça maintenant. Notre pick-up. Il est coincé parce que si vous vous souvenez avec les champs de texte, nous pourrions simplement appuyer sur la touche de retour pour les rejeter avec notre choix de vous. Au moins pour le moment, nous n'avons aucun moyen d'en sortir parce qu'il ne joue pas avec les mêmes règles que le délégué du champ de
texte faisait dans le champ de texte devrait retourner la méthode ici, mais pas de soucis. Il y a vraiment deux façons de gérer ça assez facilement. Et si nous revenons à la méthode de la route choisie ici, une chose que nous pouvons dire est qu'une fois qu'ils ont fait une sélection, nous pouvons aller de l'avant et rejeter cette photo de vous. Mais vous vous demandez peut-être comment on ferait cela sur la vue ? Il y a une vue, pas une méthode d'édition de fin. Et si nous allons de l'avant et jetons un oeil à la documentation pour cela en cliquant sur la commande et en sautant à la définition, il est utilisé pour faire démissionner la vue ou toute sous-vue qui est le premier répondeur. Et c'est important parce que chaque fois que ces champs de texte affichent leur clavier où ils affichent leurs vues d'entrée comme le fait la vue du sélecteur, c'est un premier élément répondant, et il répond à. C' est la première chose à répondre à l'entrée de l'utilisateur dans la chaîne des premiers répondeurs, fondamentalement, et en le forçant à se terminer ou en appelant la vue et l'édition définie sur true, il va automatiquement le rejeter quel que soit le type est ouvert à ce moment -là. Et voyons s'il y a même oui,
ok, ok, donc à partir de l'option rapide ici, il y a encore plus de documentation. Cette méthode examine la vue actuelle et son abus d'une hiérarchie de vue pour le
champ de texte qui est actuellement le premier répondeur. S' il en trouve un, il demande à ce champ de texte de démissionner de son premier répondant, et si le périmètre de force défini sur true, le champ de texte n'est même jamais demandé, est forcé de démissionner. Donc maintenant, si nous exécutons ceci et avant de courir, il fera 11 autre chose ici est va lier le type sélectionné au champ de texte de type tâche. Donc, ce que nous pouvons faire ici dire que la propriété de texte de champ de texte de type de tâche est égale à
la sélection ou les types de tâche pour la ligne. Et nous allons lier la valeur voleur, qui est cette force à la propriété de texte réelle ici. Et alors, lançons ça maintenant dans le simulateur et jetons un coup d'oeil à ce que ça va dio. Alors on y va. Je dois faire une sélection pour étudier et vous voyez qu'une fois la sélection faite, il apparaît ici dans le champ de texte dans le choix de vous est rejeté automatiquement. Et si je le passe à nouveau au travail domestique, la même chose revient au codage sélectionné et rejeté
15. Construction de Constructing: Maintenant, nous sommes prêts à recueillir la dernière information de l'utilisateur, et c'est la date d'échéance de la tâche. Donc, comme nous l'avons fait avec les États-Unis, une photo de vous allait utiliser un sélecteur de date U I, qui ressemble à une vue de sélection de vous. Mais une grande partie de la logique en termes de délégué et le protocole est gérée par l'Iowa pour nous. Donc, ce qui va commencer à faire est d'ajouter une barre privée de faire le sélecteur de date et le type sera vous, je sélecteur de date. Et la façon dont nous allons configurer cela est très similaire à la façon dont nous avons fait le type de tâche. Donc, si nous descendons dans la méthode configure text fields, nous pouvons aller de l'avant et commencer à configurer cela. Donc, nous pouvons dire que le sélecteur de date d'échéance est égal à une nouvelle instance d'un sélecteur de date U I. Et ce que nous ferons ici, c'est de jeter un oeil à ce cours et de voir ce qu'
il y a dedans . Donc, commande flick, puis sauter à la définition de vous. Je sélecteur de date et nous pouvons voir tout de suite que de cette classe, il hérite de vous je contrôle et le codage. Et vous que je contrôle est un autre verre intermédiaire entre vous, je vois et vous, je sélecteur de dates qui a plus de contrôle ou des propriétés connexes. Donc, si nous revenons d'un niveau ici dans le sélecteur de date u I, nous avons remarqué que certaines des propriétés que nous avons notre humeur de sélecteur de date Ah, calendrier
locale fuseau horaire la date Ah, dans quelques choses différentes concernant la date maximale minimale définition de la date, etcetera. Vous remarquerez qu'il n'y a pas de délégué ou ah, source de
données que nous devons implémenter ici. Et comme je l'ai dit au début, IOS gère à peu près cela pour nous. Eso C'est un peu facile d'utiliser une photo de vous pour les dates Maintenant, il y a aussi le
mode sélecteur de date . Vous avez l'heure date huit et l'heure et le compte à rebours. On va utiliser la date pour la nôtre. Donc ce que nous allons faire est de revenir en arrière et sur notre sélecteur de date d'échéance, que vous
faites le sélecteur de date ne pas le mode de sélecteur de date égal à la date de point Et une fois que nous avons maintenant allons aller à notre champ de texte, qui est le champ de date d'échéance et ce que nous allons faire pour signer la vue d'entrée égale au sélecteur de date d'échéance. Et encore une fois, la raison pour laquelle cela fonctionne est
que, comme vous venez de le voir, la vue d'entrée est votre vue. Le sélecteur de date d'échéance hérite de vous que je contrôle qui hérite de vous, je vois. Par conséquent, nous pouvons l'assigner directement à ah vue non, pas de questions posées. Donc à ce moment-là, , il y a encore un peu plus à faire concernant,
euh, euh, la
gestion de la sélection. Une autre chose que je veux jeter un oeil, c'est à l'intérieur de toi. Je contrôle Cela nous permet également d'ajouter fondamentalement des événements. Donc, comme nous, hum, géré les clics de boutons et le storyboard sec des actions. Nous pouvons également ajouter des gestionnaires de clic de bouton de manière problématique, et cela se fait par ajouter la cible. Et donc, puisque nous sommes dans Stan Shading est contrôlé par programme, nous devons nous assurer que nous branchons la valeur sélectionnée changée ou le gestionnaire par programme aussi. Trois. Ajouter la cible, qui vient de vous. Je contrôle et sans surprise, vous je bouton dérive aussi de vous. Je contrôle, qui est comment il est capable d'obtenir le bouton clique à travers la cible cible aussi. Donc, revenons en arrière et voyons à quoi cela va ressembler en arrière et tâche Creator View Controller . Nous allons devoir faire ici est le sélecteur de date d'échéance monter la ligne ici. sélecteur de date d'échéance Dieu avait la cible et la cible va être soi. Est-ce que ce contrôleur de vue House Creator. Donc, nous ajoutons cette cible à cette classe, et ce sera une action ou un sélecteur. Et le format pour cela va ressembler à ce sélecteur de hashtag et le nom de la classe, qui, dans ce cas, est chargé créateur, contrôleur de
vue, et ensuite nous devons lui donner une méthode qui va être invoqué. Donc, je n'ai pas encore créé cette méthode, mais nous allons bien faire. Appelle-le. Nous allons appeler cette nouvelle date de méthode sélectionnée. Tu sais, on appelle ça, euh, rendez vous ici et pour les événements que je contrôle. Nous allons utiliser la valeur de pensée changée. Et si nous jetons un coup d'oeil à cela mais nous avons engagé en cliquant sur la valeur modifiée ici, si je pouvais y entrer, nous reviendrons à ce que c'est compilé parce que nous avons encore besoin d'ajouter cette méthode. Donc, la méthode que nous devons ajouter est date funk sélectionnée date que vous I d sélecteur. Eh bien,
en fait, appelez ça juste pour être clair Date, date de sélection. Mais tu es là, d' accord ? Et nous allons devoir faire une chose de plus pour que cela fonctionne prêt à ajouter à O B J c ici et laissez-moi voir ce que cet air dit. Donc, voici leur première date méthode d'instance sélectionnée qui n'est pas exposée à l'objectif C ad à O B J C. Pour exposer cette méthode d'instance à l'objectif C. Donc, si nous frappons, corrigez automatiquement ce que Vous allez voir ici c'est qu'il va ,
euh, mettre à O V J c devant la méthode ici et vous verrez que cet avertissement disparaît. Donc, je vais commander d'être et de construire très rapidement et de vérifier que tout se compile. Et je voulais jeter un oeil ici à cette valeur a changé et voyons si je peux trouver que facilement ici,
Um, Um, recherche de valeur a changé juste ici. Il y a donc différents types d'événements dans les contrôle événements de
contrôleaméricain frappés ici. Nous sommes intéressés à écouter chaque fois que la valeur change. Fondamentalement, lorsque l'utilisateur sélectionne une date différente, cet événement va être appelé, mais il y a d'autres choses à toucher. Annuler retoucher l'extérieur retouche vers le haut à l'intérieur, qui est couramment utilisé pour vous. Je boutons, toucher, glisser beaucoup de choses différentes ici que vous allez vouloir jeter un coup d'oeil et voir ce qui pourrait avoir du sens pour ce que vous essayez de dio si vous faites programmatique euh, des
sélecteurs comme nous C'est juste fait. Alors revenons en arrière. Et maintenant que nous avons tout ce que branché, mais nous pouvons faire ici est imprimer le sélecteur de date obtenu date et allons de l'avant et lancer cela
très vite dans le simulateur et vérifier que tout fonctionne comme prévu. Bon, alors allons-y et quittons ça et voyons si notre contrôle arrive et c'est le cas. Vous pouvez voir qu'il a trois composants. Il a un mois. Il y a un jour et un an. Donc, si nous
sélectionnons, disons April maintenant, vous remarquerez que la méthode sélectionnée de date que nous avons ajoutée par
programme via cette méthode cible d'annonces ici a été simplement invoquée parce que l'événement de
changement de valeur a été déclenché. Donc maintenant, si nous imprimons la date point du sélecteur de date juste ici, voyons ce que nous avons et ça ressemble à 18 2018 maintenant, c'est bon. Je ne veux pas vraiment utiliser ce format inutilement. Donc, ce que nous pouvons faire est d'utiliser une date pour la matière pour formater la date
qui revient dans un format qui semble un peu plus joli. Et puis nous avons combiné cela au champ de texte. Donc, pour le formatage, la date, le format que je pense sera le plus facile à utiliser ici sera ce genre de capital de format . Mm, dd pourquoi ? Pourquoi ? Pourquoi ? Pourquoi ? Donc ça va se tenir pour le mois, le jour et ensuite l'année 44. Et donc, la façon dont nous nous conformons à la date qui revient est d'utiliser une date pour la matière. Donc nous allons juste faire Flett Date pour la matière égale date avant la matière. Et puis nous allons définir le format à cette chaîne. Je viens de taper le commentaire. Donc, date pour le format point huit matière qui est égal à Non, juste utiliser ceci exactement comme il est parce que c'est le bon format que la chaîne là-bas. Et puis ce que nous allons faire est de laisser la date formatée est égale à la date pour la chaîne de points de matière du jour et la date qui va revenir est du sélecteur de date ici. Donc, il est fondamentalement en passant lui-même dans la méthode ici parce qu'il a été changé. Donc, sélecteur de date. Pas celle-là. Non, non, non. Aucune date de point de sélecteur de date. Et donc à ce stade, ce que nous allons faire est en fait lier cette valeur de chaîne au champ de texte de date d'échéance. Donc, la date d'échéance, le champ de texte a obtenu le texte est égal à la date formatée. Et ce que nous ferons est après que nous l'avons lié au champ de texte va rejeter les
vues d'entrée . Va faire vue a fini. L' édition est définie sur true, comme nous l'avons fait pour sélectionner une tâche. Maintenant, lançons ça dans le simulateur, voyons à quoi ça ressemble. Bon, alors allez dans le alors allez dans lechamp de texte de la date d'
échéance ici,
et allons de l'avant et choisissons une date différente. champ de texte de la date d'
échéance ici, Je vais essayer le 18 juin et regarder ça. Alors regarde vos six pour le mois 18 pour la date ou le jour, puis 2018 pour l'année. Essayons de choisir quelque chose d'autre va essayer. Peut-être le 18 septembre. Allons peut-être faire sauter l'année 2020. Peut-être monter la date. Quelques jours. 22. On dirait que tout fonctionne là. Si vous retournez en arrière et essayez l'autre champ ici, , ça marche comme prévu aussi. Euh, assurez-vous que mes claviers simulés fonctionnent ici, clavier
logiciel et, hum, voyage. Et bien sûr, tout fonctionne très bien.
16. Amélioration de l'expérience d'utilisateur: maintenant, avant que nous soyons prêts à créer la tâche, il y a quelques choses que nous voulons améliorer. Vous remarquez tout de suite que sont intitulés Bouton fermé sont vraiment proches de la barre d'état ici, au point où il semble visuellement peu attrayant. Donc c'est quelque chose que nous voulons vraiment aborder. Et en plus de cela, euh, que faire si un utilisateur ouvre accidentellement une euh,
que faire si un utilisateur ouvre accidentellement unevue de
sélecteur un clavier ou un sélecteur de date,
mais ne veut pas faire de sélection à partir de là et n'a aucun moyen de rejeter le vue de
sélecteur un clavier ou un sélecteur de date, ? n'y a pas de bouton de fermeture. Il n'y a aucun moyen de s'en sortir sans faire une sélection dans la photo réelle de vous. Et c'est quelque chose que nous voulons aussi améliorer. Commençons par la barre de navigation et voyons ce que nous pouvons faire là-bas. Donc, l'espace par défaut était généralement les hauteurs des barres d'état 2020 pixels. Donc, ce que nous ferions est de prendre notre barre de navigation que nous avons en ce moment et de la retirer de 20 pixels là-bas. Donc, si on retourne dans le tableau principal,
on peut commencer à travailler sur ça maintenant. Et si nous allons dans le contrôleur de vue du créateur de tâches et que nous descendons ici aux problèmes de
mise en page automatique du résultat , nous pouvons me sélectionner des contraintes claires alors que nous avons la barre de navigation sélectionnée de sorte qu'elle ne supprime que les contraintes pour le barre de navigation. Et une fois que nous avons fait cela, étaient libres de commencer à déplacer la barre de navigation autour. Et ce que je vais faire ici, c'est aller dans cette petite icône de règle en haut pour l' inspecteur des
tailles, et je vais commencer à bouger. L' axe Y est que lorsque vous augmentez l'axe y, il va effectivement se déplacer vers le bas du contrôle ou de l'élément que vous avez manipulé. Donc, nous voulons faire baisser ça de 20 ans. Et une fois que nous avons cela là à ah, comme était 20. Mais nous pouvons faire est d'aller de l'avant et d'ajouter quelques contraintes pour le corriger dans cette position sur la façon la plus simple de le faire qui serait d'aller dans le bouton complètement out ici, et nous allons ajouter une contrainte supérieure, une contrainte droite ou de fin, une contrainte de gauche ou de tête et ah, faisons une hauteur de 44 là et ah, nous allons le fixer en position Alors maintenant, lançons ceci dans le simulateur et voyons à quoi il ressemble comme tel. Cela semble certainement mieux, mais nous pouvons réellement améliorer cela et aller plus loin. Nous pouvons réellement répliquer la barre de navigation exacte qu'un contrôleur de navigation utilise par défaut à l'intérieur de notre contrôleur de vue de modèle qui ne se présente pas à l'intérieur de la
pile de navigation . Et pour ce faire, nous devons réellement utiliser le délégué de la barre de navigation sont une barre de navigation et utiliser l'une des méthodes de
délégué pour obtenir ce look. Alors ce que Weaken Dio est d'ouvrir l'éditeur assistant ici. Donc, nous avons notre storyboard ouvert et notre code d'un côté. Et si nous allons à notre contrôleur de vue créateur de tâches, ce que nous allons faire est de sélectionner la barre de navigation et de créer une sortie Navy pour elle. Donc, maintenez sur la touche de contrôle, cliquez et faites glisser dans le contrôleur de vue, et nous allons juste appeler cette barre de navigation peut créer la connexion. Et puis ce que nous allons faire ici, c'est que nous allons réellement utiliser le délégué en l'affectant , et si vous l'avez fait, lead fera la barre de navigation dot Delegate, qui est un U.
N. N. Navigation délégué de la barre est égal à soi. Maintenant, vous remarquerez que nous allons obtenir une erreur de compilation ici assez rapidement parce que le contrôleur de vue du
créateur de test ne se conforme pas encore à ce protocole parce que nous venons de l'ajouter. Donc exactement de la même façon que nous l'avons fait pour la vue du sélecteur et le délégué du champ de texte. On va le faire pour le délégué de la barre de navigation. Donc, nous allons le faire en créant une extension. Vous êtes chargé de contrôleur Creator View, qui est conforme à vous, je délégué de la barre de navigation et la méthode que nous voulons utiliser à partir d'ici. Si vous commencez à taper le mot position quatre barre qui renvoie la, um, position de la
barre, nous allons retourner en haut attaché. Maintenant, relancez cela dans le simulateur et voyons si cela a permis d'améliorer la façon dont notre barre de navigation était positionnée. Donc, vous concédez que la barre de navigation ici est maintenant attachée au haut très similaire à façon dont il s'agit des contrôleurs de navigation. La barre de navigation est eso. On dirait que c'est toujours dans le même style, même si c'est un motif. Nous avons présenté le contrôleur de vue, donc cela fonctionne en quelque sorte, et il semble beaucoup mieux que ce que nous avions avant maintenant pour rejeter tous les
types de clavier qui sont présentés. Ce serait génial si nous avions un moyen de détecter si l'utilisateur avait tapé à l'extérieur du clavier. Et en fait, il y a un moyen de le faire. Et on peut utiliser ce qu'on appelle un geste U I tap. Reconnaître er pour détecter un robinet sur un particulier que vous avez des éléments dans ce cas, nous voudrions mettre ce robinet sur la vue des contrôleurs de vue pour déterminer quand il a été tapé ,
puis rejeter tout ce qui pourrait être ouvert. Donc, ce que nous pouvons faire ici, c'est créer une nouvelle méthode. Um, privé funk configure, tape geste, Reconnaître er er et on peut appeler ça en vue. N' a chargé juste après que nous appelons les champs de texte de configuration. Donc, configurez le geste de toucher Reconnaître er er et va créer un nouveau, euh, geste. Reconnaissez-la comme ça. Donc, laissez un geste de toucher reconnaître er égale que vous j'appuie sur geste. Reconnaître er et initialiser utilisera Here is the target and the action, tout comme nous l'avons fait avant Pour le sélecteur de date U I. On va recommencer la même chose, programmatiquement euh, en ajoutant un gestionnaire de robinet. Cliquez sur Candler Donc, la cible dans ce cas sera auto pour le créateur de la tâche réelle de votre contrôleur Et le sélecteur sera la méthode qui sera appelée lorsque le robinet est sélectionné. Maintenant, dans ce cas, je n'ai pas encore écrit cette méthode, mais je vais commencer par écrire le sélecteur. Et ce sera le contrôleur de vue du créateur de tâche, um point a détecté ? Oui, et juste ici, toutes les fonctions créatives. Ouvre là où on a l'autre. Funk a détecté le robinet et nous allons voir si nous obtenons maintenant va probablement se plaindre. Laisse-moi voir si Ah, pas encore. Nous devons exposer à o b j C. Parce que j'ai dit que cette méthode peut effectivement être utilisée dans l'objectif C de la façon dont elle est initialisée dans Swift. Laisse-moi au moins vérifier que c'est là. Donc OK, n'a détecté l'application est là. Et, euh, si nous voulions passer dans le geste, reconnaissez ? , euh, Euh, euh,quand une façon de faire ça est de
reconnaître comme ça. Et puis si nous descendons ici, allons de l'avant et assurez-vous que cela construit et c'est le cas. Donc, c'est une chose que vous pouvez faire si vous passez ce paramètre. En gros, vous transmettez, euh, le contrôle avec lequel on a interagi dans ce cas, les reconnais. Donc, si nous avons besoin d'une propriété particulière sur la reconnaissance ou nous pourrions le passer comme ça ou nous aurions pu juste laisser, c'est une fonction vide. Cela n'avait pas vraiment d'importance dans le cas de la date sélectionnée lorsque nous avions besoin du sélecteur de date pour obtenir Thea l'heure ou la date qui a été sélectionnée. Eso, c'est juste 11 façons de faire ça. Eso, on n'a pas fini ici. Nous avons encore besoin de l'ajouter. Donc, vue, qui est la vue Contrôleurs de vous n'ajoutez pas de geste Reconnaître er er le geste tapotant reconnaître er lui-même. Donc maintenant, nous sommes à l'écoute des robinets et sur la détection réelle d'un robinet que nous allons faire ici est appelé vue Got édition fin dit que True, Allons-y et tester cela dans le simulateur et voir comment il se joue. Bon, donc à l'intérieur du nouveau contrôleur de tâches, Voyons voir ici pour que nous puissions faire notre photo de vous. Et si je tape en dehors des gestes de robinet détectés et nous rejetons le clavier en appelant fin édition et essayons à la date d'échéance. Affaiblir les affaires à partir de là. Essayons-le sur le clavier pour le titre. Quand vous le rejettez de là, essayons de taper quelque chose ici, rejetant. Nous pouvons toujours faire nos sélections régulières parce que nous le ferons normalement. Cerclant une date, peut-être que nous fermons à nouveau, mais nous ne voulions pas l'ouvrir, et nous ne voulons pas faire une sélection. Donc, nous sortons rapidement et cela couvre tous nos cas d'utilisation ici. Donc, à ce stade, nos expériences utilisateur ont beaucoup amélioré, et nous sommes prêts à créer la tâche et à le transmettre au
contrôleur de vue de table de liste à faire et ajouté à la liste.
17. Créer la tâche TODO: Donc maintenant, nous sommes aussi et prêts à réellement créer la tâche. Hum, Donc ce que nous voulons faire ici, c'est descendre dans la méthode creer la tâche tapée ici, et c'est là que nous allons prendre toute l'entrée que l'utilisateur a générée et créer la tâche sur rejeté ce contrôleur de vue automatiquement. Donc, pour commencer, nous voulons faire quelques vérifications de santé mentale. Nous voulons nous assurer que nous pouvons obtenir tous les attributs et nous n'avons aucun problème. Donc, la première chose que nous voulons vérifier est d'obtenir le titre de la tâche que l'utilisateur a mis dans afin que
nous puissions faire une vérification du titre de la tâche. Nous allons faire un titre de tâche laisser égale tâche, son titre texte champ texte point texte et nous pouvons faire ici est garde. Laissez-le revenir ehlz, et nous allons juste mettre l'impression n'a pas réussi à obtenir les attributs requis. Donc, si nous allons de l'avant et si nous nous souvenons de cela pour créer une nouvelle tâche, nous devons donner un titre, une date d'échéance et un type de tâche réel. Donc, en plus de tout cela,
ce que nous pouvons également faire est que nous devons vérifier les deux autres attributs dont nous avons besoin maintenant,
en plus du titre de la tâche que nous devons vérifier pour la date d'échéance et le type de tâche. Mais aussi juste vérifier pour de nouveaux ne suffit pas. Ah, l'utilisateur pourrait également ne pas ajouter de texte, même si l'attribut text peut ne pas être nul, Il n'y a peut-être pas de caractères dans le champ de texte, donc nous devons développer notre vérification pour également considérer ce scénario. Et nous pouvons le faire assez facilement en élargissant notre instruction Guard avec un titre de tâche qui compte plus de zéro, qui dit fondamentalement qu'il doit y avoir des caractères dans ce champ de texte de titre
ici avant de le considérer Ballad sur. Et si vous n'êtes pas familier avec la déclaration Guard, c'est fondamentalement comme si quelque chose n'est pas égal à la vérification zéro, mais il peut être utilisé plus explicitement parce que garde signifie beaucoup foin. Quelque chose pourrait mal tourner ici, faire
attention et nous allons utiliser un programme ou savoir qu'il y a certains cas que vous devez vérifier . Et vous savez que ce cas ici est fondamentalement équivalent à si, vous savez, le texte du champ de texte de
titre n'est pas égal à zéro et la tâche intitulée ce nombre est supérieur à zéro , sauf dans une syntaxe de style de garde développer cela pour les autres champs exactement de la même manière. Et si nous avions une virgule ici avant l'autre, nous pouvons aussi le faire. le Laisseletype de tâche. Le texte est égal au type de tâche, texte, champ, texte et au type de tâche. Le nombre de textes est supérieur à zéro dans notre dernier cas pour cette vérification va être laissée
date d'échéance . Le texte est égal à la date d'échéance, le
texte de point de champ de texte et le compte de texte de date d'échéance créé en zéro. Et cela nous couvrira de sorte que nous nous assurons que nous avons un texte valide pour tous nos champs
plutôt que de simplement imprimer si quelque chose se passe mal. Ce ne serait pas bien si on voyait une sorte de bannière de l'époque ou une alerte ? C' est assez facile de le faire. Et nous pouvons le faire avec ce qu'on appelle un contrôleur d'alerte U I, qui affiche essentiellement un petit message pop-up avec un titre et du texte et un bouton afin que
nous puissions configurer une nouvelle fonction pour cette erreur d'affichage funk privé et la chaîne de titre d'erreur souche de message d'erreur, et nous allons créer une nouvelle instance d'un vous soit. Trolleur. Allons Ah, le contrôleur
d'alerte d'erreur est égal au contrôleur d'alerte élevé. Et pour l'Isar initial utilisera le titre du message dans le style. Nous allons passer
par erreur, message de l'ère du titre et pour le titre du style. Je veux dire, on va utiliser l'alerte. Il existe également une feuille d'action, mais ce n'est pas pertinent pour ce type de message d'erreur. Donc, cela nous permet de configurer pour le titre et le message. Mais nous devons également ajouter dans le bouton OK où le bouton pour rejeter la vue d'alerte ou le contrôleur d'alerte. Donc, nous pouvons le faire en créant une action u I alerte. Alors allons, euh, action vous égalera. J' alerte l'action pour l'Isar initial pour le style de titre et Handler, et pour le texte allait mettre ok pour le style. Je vais mettre, hum, par défaut. Et pour le gestionnaire, c'est juste, ah, la fermeture du rappel pour quand le bouton est cliqué. Si vous avez besoin de faire une logique, même si c'est facultatif, je vais en fait l'implémenter juste pour que vous puissiez voir à quoi cela ressemble. Donc, Prince, le bon gestionnaire de boutons a été appelé. Et une fois que nous
avons créé cela, il suffit d'ajouter cela au contrôleur d'alerte. J' ai pensé à l'action publicitaire. Est-ce que vous ajoutez le bon, action. Et enfin, nous devons présenter le contrôleur d'alerte. De la même façon que nous aurions contrôleur de vue modèle. Donc, nous appelons juste erreur présente Alert Controller Animated True. Gestionnaire d'achèvement, Néant. Nous ne nous soucions pas vraiment de ce qui se passe et allons de l'avant et exécutons ça, mais nous allons le faire avec Bad dans. Mais testons le, euh le bain non heureux. Nous voulons donc que l'un ou l'autre de nos champs soient vides afin que nous puissions voir notre contrôle d'alerte
s' appeler. Alors je vais ici, appelez, créez une tâche sans rien dedans. Vous pouvez voir que j'obtiens le message aussi à Si vous regardez vers le bas sur les journaux, vous pouvez voir que le gestionnaire correct a été appelé. Donc ça veut dire que ça reçoit un rappel. Civil . Donc, par
exemple, si je tape ici et juste ce coup de création, ok, nous verrons ce point de frein est touché parce que la fermeture du gestionnaire ah est atteinte
ici . Donc, Donc, on sait que ça marche. Hum, et maintenant nous sommes bons d'aller de l'avant,
en fait, de construire notre tâche Donc maintenant nous avons le titre, le type et le texte de la date d'échéance. Maintenant, nous devons construire le type et la date à partir de ceux-ci donc nous devons faire ensuite. par la date va créer une, um laisser la date pour la matière Equals fait avant la matière Et laisser, um, c'est la date d'échéance égale la date de début de matière à partir de la chaîne, dont la chaîne sera le texte de date d'échéance et vous remarquez ce retour et facultatif ici. Donc nous allons aussi avoir besoin de faire un chèque pour que nous puissions le faire, garde, laisse mec ça égale que d'autre revenir. Mais avant de revenir, nous pouvons également afficher une autre erreur. Et cela pourrait être un scénario où l'utilisateur a changé le texte dans le champ de texte, euh, en autre chose. Et ce n'est plus une validation. Donc on a mis, um, date
invalide. Il y avait un problème avec la date et ah, dernière vérification devra faire est pour la tâche. Donc, nous allons nous assurer que notre tâche let est égale tâche. Je suis désolé. type de tâche est égal au type de tâche à partir de la valeur brute de la force, et cette chaîne va être le texte de type tâche, et il retourne également un optionnel, Donc nous sommes aussi je dois vérifier pour ce tour de notre, et nous allons juste faire le la même chose ici. Afficher une autre erreur si nous avons eu un problème dans la tâche Balad. Ok, il y a un problème avec le type de demande, et si tout cela réussit, alors nous sommes prêts à y aller. Donc, permettez-moi de tâche égale tâche pour le titre du test ici, la date d'échéance à partir d'ici et le type de tâche à partir d'ici. Et à ce stade, nous pouvons appeler dismiss, ce qui nous ramènera au,
um pour faire le contrôleur de vue de table liste. Donc, nous allons appeler animation True achèvement pour non avant de lancer ça. Assurez-vous également que nous vérifions le format de date que nous avons défini ci-dessous. Donc, si vous vous souvenez de retour ici pour le
mois, mois, , jour, l'année, nous voulons utiliser le même format. Donc, nous allons simplement copier ceci et dans notre vérification ici, assurez-vous que le format est le même. Ah, et maintenant, allons continuer et jouer et voir si nous pouvons créer une nouvelle tâche et vérifier que dans des cas valides sont protégés contre. Maintenant, disons juste um, laver la voiture. Disons que c'est du travail à la maison et disons que je dois le faire d'ici demain. Mais disons que je change, euh, travail de
maison en un type de tâche qui n'existe pas, comme le travail de voiture. Et puis j'ai frappé. Créer une tâche. Vous verrez que ce type de tâche non valide est apparu car il y a eu un problème avec le type de tâche. Je ne pouvais pas Ils ne pouvaient pas construire un cas pour cela parce que ce n'est pas l'un de nos types pris en charge , hum, dans l'énumération. Donc si on remet ça au travail de la maison, disons qu'on rompt la date. Um, en
mettant une date non valide dans le rejet de création, il y a eu un problème avec la date. Ok, cool. Donc ça semble attraper ça. Et disons que nous avons tout le reste, mais pour une raison quelconque, nous avons décidé que Teoh omettait entièrement le titre. Il crée la tâche, les attributs requis
manquants. Donc nous sommes assez bien protégés ici sur les choses il y a. Un peu étrange. Et maintenant, euh, enfin laver la voiture, ce
qui est maintenant notre cas valide. Allons-y et créons-le. Et bien sûr, nous avons créé la nouvelle tâche et nous avons rejeté le contrôleur de vue Maintenant, nous avons un problème. Comment pouvons-nous arriver à la nouvelle tâche à partir de l'endroit où il était dans le créateur de tâche de votre contrôleur, revenir au contrôleur de vue de table de liste à faire et plus important encore, avoir automatiquement ajouté à la vue de table. C' est quelque chose que nous ne sommes toujours pas en mesure de faire pour le moment. C' est donc quelque chose que nous allons résoudre en implémentant notre propre protocole. Ce sera notre délégué,
et notre délégué sera averti quand une nouvelle tâche a été créée et sera en mesure d'ajouter cette nouvelle tâche à notre contrôleur de vue de table automatiquement.
18. Introduction aux protocoles et la délégation: Donc, dans notre dernière vidéo, nous avons été confrontés au dilemme de savoir comment passer la nouvelle tâche à notre table de
liste de tâches de votre contrôleur. Et bien qu'il y ait quelques façons de le faire et pas nécessairement une réponse rouge particulière , c'est un très bon point pour commencer à parler des particules et du
modèle de conception de délégation . Donc, commençons par peut être créer un exemple rapide dans une aire de jeux. Juste nous pouvons illustrer le point isolément, puis prendre ce concept et l'appliquer à notre application. Dans mon terrain de jeu rapide ici, j'ai créé une classe très basique sur, et c'est une classe juste appelée animal de compagnie avec
une propriété, un nom, un Isar initial qui attribue ce nom. Et cet animal pourrait être n'importe quoi. Ça pourrait être un chien. Un oiseau pourrait être un chat. Ça pourrait être quelque chose de plus exotique, peut-être même un serpent. Donc, un protocole est fondamentalement un Blueprint, un Blueprint de fonctionnalité. Donc si on voulait définir un chien pour les comportements qui appartenaient au chien, on pourrait créer un protocole appelé Dog. On pourrait dire que ce protocole a un parc de fonctions et peut-être que cette particule a une race
particulière pour le chien. Donc peut-être une barre, euh, race de type chaîne. Et à un niveau très basique, cela signifie que toute classe conforme au protocole chien doit avoir une race, et il doit avoir la capacité d'aboyer. Donc, disons, par
exemple, nous faisons l'animal de compagnie conforme au chien afin que nous puissions le faire de la façon suivante. On pourrait le faire. Ce style de syntaxe ici. Et quand nous rendons l'animal de compagnie conforme au chien, vous verrez que nous avons une ère tout de suite qui n'est pas conforme à ce chien de protocole . Et si vous cliquez sur le message d'erreur, il demande si nous voulons ajouter des stubs de protocole. Et si on frappe, répare ce qui se passera. Les codes X vont-ils automatiquement ajouter dans la race pour une propriété et une fonction appelée Bark ? Et il le fait parce qu'il sait que c'est ce que nous avons défini dans le protocole
ici . Et donc nous devons avoir ce comportement parce que le protocole exige que nous dions pour que nous puissions faire quelque chose comme l'impression. Par exemple, um nom aboyait bruyamment. Nous pouvons également injecter dans une race ici pour le type de celui qui appartient à ce chien afin que nous
puissions faire auto dot race égale race, et cela garantit un moyen de s'assurer que cette classe va orteil ont certaines choses que nous spécifions ici. Donc, si nous ajoutons le paramètre manquant pour la race et disons que Fluffy est un carlin maintenant quand je peux faire ici est au lieu de que je peux dire animal de compagnie, ne travaille pas à la place et nous verrons que Loving aboyait bruyamment et moelleux. Il est une lecture ou un carlin cette partie bruyamment de sorte que le problème un peu plus de sens dans le contexte ici. Et c'est donc une façon que nous pouvons rendre une classe conforme à un protocole les autres façons à travers les extensions. Donc on a fait ça tout le temps. Um, comme vous l'avez vu avec le délégué de vue de table U I et la source de données, le vous je sélecteur de vue délégué dans la source de données. Nous avons mis en œuvre toutes ces mesures par le biais d'extensions. Maintenant que nous comprenons les protocoles, changeons de vitesse et parlons de la poudre de conception de délégation. Donc, dans les termes les plus simples, délégation est fondamentalement un modèle où un objecteur, une chose peut déléguer des responsabilités à une autre entité, classe ou chose qui agira en son nom. Maintenant, il est mieux illustré à travers un exemple, et je pense que cela aura un sens assez clair une fois que je vous montrerai ce morceau de code ici. Supposons donc, par
exemple, que nous ayons une classe appelée propriétaire d'animal de compagnie ou bébé. Appelons un propriétaire de chien, hein ? Maintenant, il est faire propriétaire d'animal de compagnie et créons un autre politique appelé chien délégué. Et disons que ce protocole a une fonction. Le chien a aboyé. Et donc notre propriétaire d'animal de compagnie a un animal de compagnie. Et disons juste que notre véritable het ici et dans ce cas va juste supposer que c'est Ah , chien, hum, a un délégué. Donc, faisons var délégué de type chien délégué comme un optionnel juste commencer. Et ne vous inquiétez pas si c'est un peu déroutant, tout a du sens une fois que tout est assemblé. Donc, notre propriétaire d'animal de compagnie, disons juste qu'il a un nom, qui est la chaîne de type. Disons qu'il a un animal de compagnie et qu'on l'initialisera avec un nom et un animal de compagnie. Jusqu' à présent, si bien. Ce qu'on peut faire ici, c'est en fait à Stanciute, notre propriétaire. Alors faisons ça ici. On va dire ça. Laissez le propriétaire de coupe égale propriétaire de l'animal de compagnie. Elle s'appellera Jim. Et ce sera l'animal que nous venons de créer ci-dessus, qui est notre carlin. Et on va changer le nom de notre animal de compagnie. Teoh. Juste un nom. C' est un insecte. Et donc, Jusqu'à présent si bon. Donc, nous avons cette mise en place ici. Maintenant, vous vous souvenez que nous avons mis cette propriété de délégué ici, et ce que nous pouvons dire, c'est que notre propriétaire va se conformer au délégué de chien, qui signifie que le propriétaire de l'animal est le délégué ou agit au nom de son animal de compagnie, alors que Doc en l'occurrence. Donc, ce que nous pouvons faire est de créer une autre étendue que nous pouvons créer une extension. Et c'est exactement comme ça qu'on l'a fait pour toi. Je choisis votre délégué dans la source de données, délégué
de vue de table dans la source de données. Donc extension sur le propriétaire de l'animal de compagnie, qui est conforme à délégué de chien. Et maintenant, si on laisse s'asseoir ici, on va avoir une erreur de compilation disant que Hey, on ne se conforme pas au protocole. Nous devons mettre en œuvre la méthode chien a fait Mark. Donc on a commencé à taper le chien n'aboyait pas. Maintenant, notre délégué est le propriétaire de l'animal. Peut réagir et faire quelque chose à ce sujet. Peut-être qu'il l'a averti. J' ai besoin de nourrir mon chien à tout moment,
le chien aboie. J' ai besoin de nourrir mon chien à tout moment, Alors, comment invoquons-nous ça ? Et pour moi ici, eh bien, nous avons besoin en fait un signe les délégués. Donc, si notre propriétaire d'animal se conforme au protocole et ce que nous pouvons dire, pet dot délégué est égal à soi. Et la raison pour laquelle nous pouvons dire moi est parce que le soi fait référence à parce qu'il est à l'intérieur du
propriétaire de l'animal de compagnie. Classy fait référence au propriétaire d'un animal de compagnie. Et parce que cette extension de propriétaire d'animal de compagnie est conforme au délégué de chien, c'est la raison pour laquelle nous pouvons l'attribuer à soi-même. qui signifie qu'une fois que nous avons défini cette propriété ici, nous sommes branchés dans la chaîne de délégués. Nous sommes à l'écoute de toute notification ou tout événement qui est chien pourrait arriver à émettre. Maintenant, pour invoquer cela, nous devons en fait de la classe de santé ou du protocole de chien. Nous devons aller de l'avant et informer notre délégué qui, dans ce cas, notre délégué est propriétaire d'animaux de compagnie. Que quelque chose s'est passé. Donc, dans ce cas, quand l'aboiement est appelé après une déclaration de prince, nous pouvons dire que le point délégué a fait que son chien n'a pas aboyé et qu'il arrivera ici est après que nous ayons mis nos relations ici. Si nous disons l'écorce de carlin, regardons les journaux de la console ici. Donc nous voyons ici Fluffy est un carlin qui aboyait bruyamment, qui est cette déclaration imprimée. J' ai été viré et le délégué est prévenu. Lorsque les délégués ont notifié le propriétaire de l'animal de compagnie, il vient ici dans cette déclaration est exécuté. J' ai besoin de nourrir mon chien. Donc maintenant, le propriétaire de l'animal est conscient que quelque chose s'est passé et le propriétaire doit faire quelque chose ce
sujet. Et nous pouvons utiliser ce concept pour exactement la même situation pour notre nouvelle tâche et en informant notre pour faire le contrôleur de vue de table qu'il n'y a pas votre tâche et nous devons faire quelque chose à ce
sujet, donc encore une fois pour résumer que la raison pour laquelle nous utilisons des protocoles pour délégués est parce qu'ils sont le plan qui a défini le comportement dans ce cas, chien n'a pas aboyé doit être implémenté par tout délégué qui est conforme au
protocole de délégué de chien . Maintenant, pour notre application sont notre liste de choses à faire. contrôleur de vue de table va devenir le délégué du contrôleur de vue du créateur de tâches . Donc, chaque fois que nous créons une nouvelle tâche, notre créateur de tâche va informer les délégués qu'il a créé une tâche. Et nos délégués dans ce cas ne seront que la liste des choses à faire. contrôleur de vue de table va être averti qu'une nouvelle tâche a été créée. Nous pouvons passer cette nouvelle tâche en tant que paramètre à l'intérieur de la méthode, puis l'ajouter à la
vue de table pendant que nous faisons le rejet de notre liste réelle à faire. Notre tâche. Créateur de votre contrôleur. Donc maintenant, en prenant ce que nous avons appris ici sur les verticales et les délégués, allons de l'avant et mettre en œuvre notre propre délégué et en fait accrocher cela afin que nous puissions ajouter la nouvelle tâche à notre table de vous.
19. Créer notre propre délégué: maintenant, en prenant ce que nous avons appris du tutoriel précédent, nous pouvons faire notre propre délégué créateur tâche. Alors allez en haut de la tâche Creator view controller dans le projet principal dans lequel nous
travaillions . On va créer un nouveau protocole juste au-dessus de notre classe. Ce protocole s'appellera Créateur, délégué. Et pour l'instant, nous allons juste ajouter une méthode. Funk a créé une nouvelle tâche et fournira la nouvelle tâche comme l'un des paramètres de la signature de la méthode. Et nous allons juste appeler cette tâche ici. Donc c'est tout ce que les particules vont avoir ? C' est très simple. Une méthode. Pas beaucoup. Teoh. Oui, conforme à. Donc maintenant, retour dans la tâche Creator view contrôleur, Nous avons besoin de créer une propriété, la propriété de délégué. Donc, nous allons faire un délégué var de type créateur de tâche, délégué, et vous allez vouloir rendre cela facultatif pour la raison est que votre contrôleur de vue
créateur de tâches pourrait ne pas avoir de délégué. Une autre classe peut ne pas s'être assignée pour être le délégué de ce contrôleur de vue. Nous ne voulons donc pas essayer d'invoquer un délégué qui n'existe pas. Donc, en le rendant facultatif si nous l'invoquons et que personne n'est abonné à ce délégué, nous n'allons pas obtenir un plantage d'exécution. Donc, maintenant, nous devons savoir où faire cet appel de délégué ou quand
avons-nous celui qui écoute de l'autre côté qu'une nouvelle tâche a été créée ? Eh bien, l'endroit logique pour le faire serait à l'intérieur de la méthode de création de tâche engagée ici. Une fois que nous sommes réellement descendus à la création de la nouvelle tâche. Donc juste ici avant de faire notre licenciement, nous pouvons simplement le faire. Le stock délégué a créé une nouvelle tâche et a transmis la nouvelle tâche comme ça. Et encore une fois, bien que cela soit facultatif ici, si personne ne s'est assigné pour être le délégué, alors c'est bien. Cela passera juste. Nous ne tomberons pas dans notre travail aux pommes comme prévu. Donc maintenant, revenons dans la liste à faire le contrôleur de vue de table et assurez-vous qu'il devient le délégué pour le créateur de tâche. Donc, dans notre liste de choses à faire ici, euh, nous voulons probablement dio est de se débarrasser de cette source de données statique que nous définissons ici
parce que rappelez-vous que nous utilisions le revêtement dur, euh, le
moment. Mais nous allons rendre ces dynamiques maintenant en créant les nôtres afin que nous puissions aller de l'avant et commenter la construction d'une source de données pour l'instant, ou la supprimer tout ce que vous choisissez de faire. Si vous faites une barre oblique avant, vous pouvez mettre en surbrillance un bloc ici et commenté dans un Go. Je voudrais également commenter en vue. chargé où nous l'appelons, et une fois que nous avons fait cela, nous devons faire ici est de faire ce gars pour faire la vue de table de liste, classe de
contrôleur conforme à ce protocole. Et donc, tout comme nous l'avons fait dans le tutoriel précédent, nous pouvons créer une extension sur un contrôleur de vue de table de liste à faire. Cela est conforme au créateur de tâche, délégué. Et vous pourriez vouloir faire une commande soit de construire votre projet ici parce que parfois le Mexique a du mal à le trouver, et une fois qu'il le trouve, nous allons l'implémenter. Non pas que nous avons créé appelé n'a créé une nouvelle tâche. Et donc une fois que cette nouvelle tâche a été créée, nous allons être avertis ici à ce sujet, et ensuite nous pouvons faire quelque chose avec elle, qui dans notre cas ici ajoute ceci à notre source de données et recharge notre table vue. on Maisonn'a pas encore fini. Nous n'avons pas fait l'affectation, essentiellement assignant à faire ce contrôleur de vue de table pour devenir le délégué. Maintenant, si vous vous souvenez comment nous sommes arrivés au créateur de test, si nous revenons au storie principal quand nous avons réellement frappé le bouton plus Ah, dans le contrôleur de vue de table qui se segue automatiquement pesé dans la création nouvelle tâche . Donc ici, quand on appuie sur ça, on Segway ici. Maintenant, la bonne nouvelle est à l'intérieur de notre liste de choses à faire. Les contrôleurs de vue de table sont préparés pour Segway. La méthode va être notifiée,
juste quand cela est sur le point de se produire et vous pouvez voir exactement de la même façon que nous avons essayé de
comprendre la destination Segways pour comprendre ce que vous contrôlez ou nous allons Teoh, Nous pouvons utiliser cette même approche ici et de déterminer si nous allons au créateur de tâches et si nous allons de l'avant et assignons les délégués lui-même juste avant la fin de cette méthode. Et c'est exactement ce qu'on va faire. Alors préparez-vous pour Segway. Nous devons être conscients de l'endroit où nous mettons ce code. Parce que si on regarde ces gardes, on reviendra beaucoup ici si certaines choses ne se produisent pas. Donc, par
exemple, si nous essayons d'attendre une cellule de vue de table u I, par
exemple, si nous voulions aller au détail de vous mais nous ne l'avons pas obtenu, alors nous sommes retournés. Même chose si nous ne pouvions pas obtenir un chemin d'index ou un contrôleur de vue détaillé. Donc, nous ne voulons pas vraiment mettre notre code ci-dessous parce que cela va échouer si nous n'y allons pas réellement. Le contrôleur de vue des détails. Hum, donc si on le met en haut, voici notre premier chèque. Donc, ce que nous pouvons dire est que si le contrôleur de vue du créateur de tâches est égal à la destination Segway, qui est que vous avez votre contrôleur, nous pouvons lancer cela comme un contrôleur de vue du créateur de tâches. Donc, si cela si laisser vérifier réussit,
alors nous pouvons dire simplement, alors nous pouvons dire simplement contrôleur de vue
du créateur de tâches, je pensais que le délégué est égal à moi et à moi étant la table de liste à faire que vous contrôlez parce que nous nous sommes conformés à cette protocole ici et puis ce qui se passera dans ce cas, c'est qu'il va continuer à travers ce garde, Laissez vérifier et puis revenir parce que ce n'est pas une table de vous vendre. Donc on n'aura aucun problème là-bas. Nous ne réussissons pas à faire la mission, et ensuite nous pouvons le faire. Voici quand cela est notifié. Donc affaiblir la déclaration d'empreinte ici. Imprimer une nouvelle tâche détectée. Nous pouvons l'ajouter à notre source de données. Donc, si vous vous souvenez, voici des sources de données, un tableau de tâches, et nous l'avons simplement dérangé. Nous l'avons recouvert dur au début de ce tutoriel, mais maintenant nous pouvons le remonter à partir d'ici. Donc, source de données qui ajoute la tâche. Et si nous appelons une vue de table des données de rechargement après que nous avons mis en place, il va automatiquement recharger chaque ligne. Alors allons de l'avant et testons cela dans le simulateur et voyons à quoi ça ressemble. Notre à notre contrôleur de vue de table de liste vide à faire. On a enlevé les trucs codés en dur là-dedans. Donc, si nous allons à l'icône plus ici pour créer une nouvelle tâche, nous allons juste appeler ceci, hum, tutoriel de
codage, et il semble que mes claviers simulés ne s'affichent pas. Donc, ce que je peux faire ici, c'est aller au matériel pendant que j'ai le simulateur sélectionné sur un clavier et Tugle le clavier logiciel. Et une fois que nous arriverons au type de tâche, j'allais mettre fin à sélectionner le codage et je dirai que la date d'échéance est demain et un gnome et
allez-y et créez cette tâche et regardez ça. Donc, si vous regardez ici dans le journal, la nouvelle tâche détectée a été appelée et nous avons déraillé cette tâche, ce
qui signifie que cela a été rappelé et nous avons rechargé les données pour la table de vous. Et faisons un de plus et je vais même jeter un point de rupture ici pour que vous puissiez le voir
pas à pas. Donc, disons que nous voulons aller à une deuxième tâche. Donc, euh, disons juste Ah, nettoyage ou la documentation puisque nous avons une tâche de travail de maison. Donc le travail à la maison et on dira que ce sera fait le 22 de merch qu'il créera et regardera. Donc boom, notre délégué, qui est fait pour faire le contrôleur de vue de table liste est notifié tout de suite. La nouvelle tâche est passée. Nous en dépendons. Recharger les données et Walla Maintenant Nous avons deux tâches. Et si nous voulions entrer dans les détails de vous pour l'un d'eux sont vieux. code fonctionne toujours exactement de la même façon que nous le pouvons. Nous pouvons puiser dans chacun d'entre eux. Cependant, nous n'avons pas encore implémenté cela, donc ça ne montrera rien. Mais tout fonctionne encore. Et maintenant, hum, maintenant que nous avons cela fonctionne dynamiquement, la prochaine étape de ce tutoriel sera d'implémenter le contrôleur de vue détaillé pour quand nous ajoutons une tâche, puis faire une sélection sur ce tâche. Nous voulons afficher cela ici et assez dans l'interface utilisateur parce qu'il est assez vide pour
le moment .
20. Styler le contrôleur de vue des détails: Maintenant, tout ce qui reste est de styliser le contrôleur de vue des détails et de le rendre joli et de
montrer les données que nous transmettons de la table de liste des tâches si vous contrôlez, qui est la tâche sélectionnée. Donc, si nous retournons dans notre contrôleur de vue détaillé ici, vous verrez que tout ce que nous avons est la tâche que nous passons. Et puis nous avons imprimé à l'intérieur de vous a chargé. Donc, nous allons devoir retourner à notre storyboard et commencer à configurer des
éléments U supplémentaires à configurer. Si on retourne au storyboard et regarde notre contrôleur de vue détaillé ici, c'est assez stérile. Alors allons de l'avant et commençons à ajouter quelques éléments d'interface ici. Mais nous pouvons faire est de descendre à la bibliothèque d'objets en bas, à droite, et nous pouvons ajouter quelques étiquettes pour commencer. Alors nous vous cherchons. J' étiquette que nous pouvons en faire glisser un sur le contrôleur de vue ici, et essayons juste d'augmenter l'intérieur de la hauteur et de donner à cela une bonne position. Nous pouvons commencer à partir du centre du contrôleur de vue,
puis travailler comme nous le devons et ce que nous pouvons faire ici est centrer le texte et, euh, nous allons donner à cela un peu plus d'espace peut être traîné sur les bords. Donnez-lui un maximum d'espace et ces petites lignes en pointillés bleues. Ou définissez des lignes directrices qui vous indiquent les zones sûres où vous pouvez positionner vos éléments et continuons et commençons avec celui-ci pour le titre. Ce qu'on va faire ici, c'est ouvrir l'éditeur adjoint. Oui. Je veux dire, il suffit de faire glisser ça dessus, homme ouvrira le contrôleur de vue diesel d'un côté ici. Et donc ce que nous allons faire, c'est commencer à créer des connexions. Nous allons donc nous connecter sur l'étiquette, et celle-ci servira de label de titre. C' est donc ce qu'on appelle cette étiquette de titre de tâche. Vous le connectez et nous allons de l'avant et créons un peu plus. Donc je vais faire ce que je vais faire ici, c'est copier cette étiquette. Si vous faites commande, voir pour copier ou simplement sélectionner l'étiquette sur faire modifier la copie, vous pouvez obtenir le même résultat, et la commande V le n'est pas Victor. On pourrait le coller. Il y en a deux de plus. Un pour le type et un pour la date d'échéance. Allons-y et essayons de les aligner. Alors, allons-y et remontons un peu. Et nous pouvons sélectionner toutes les étiquettes à la fois en maintenant la touche Maj enfoncée, en cliquant sur chacune d'elles à la fois pour une sélection multiple. Et on peut les faire glisser et essayer de les mettre au centre comme ça. Maintenant, vous remarquerez ici que je vois cela comme un iPhone huit. Maintenant, nous devons faire attention ici parce que notre titre pourrait être long. Ça pourrait être grand, , et on doit s'assurer que ça va bien paraître sur un écran plus petit. Donc, avant de brancher des contraintes, définissons des polices pour ces étiquettes. Nous commencerons par le titre et le sélectionnerons. Ils vont à l'inspecteur des attributs sur le côté droit, et nous allons changer la police pour quelque chose de différent. Je vais dio dans l'avenue ou s'amuser, alors je pense que Avenir prochain changera le style trop audacieux, et nous allons faire une sorte de plus grand. Donc, il se démarque. Euh, pense que 32 est probablement assez grand et pour l'autre au type dans les dates d'échéance. On va aller de l'avant et mettre ça, euh Teoh Avenir, mais un autre que nous n'allons pas utiliser audacieux que nous allons utiliser. Je pense que Medium aura probablement l'air OK et nous allons aller de l'avant et faire tomber ça. Je pense que Teoh 26 a l'air assez bien. Nous ferons la même chose pour la date d'échéance, qui est la troisième étiquette ici. Donc, l'avenue prochaine taille moyenne 26 et faisons ça ici. Ok, donc ça a l'air assez bien jusqu'à présent. Et maintenant que nous avons cela, essayons d'ajouter réellement les contraintes de mise en page automatique pour les fixer dans les
positions appropriées . Donc, si nous commençons avec notre étiquette de titre et que nous allons de l'avant et que nous le sélectionnons, si
nous descendons ici, nous pouvons voir qu'il est 146 loin du top 16 sur le côté gauche et 16 sur le
côté droit et 37 vers le bas. Donc, disons que nous voulons maintenir un certain espacement entre les étiquettes en dessous. Évidemment, nous pourrions utiliser une vue de pile comme nous l'avons utilisé auparavant dans le contrôleur de vue de créateur d'entrée, mais une autre chose que nous pouvons faire ici est une sorte de déplacer nos étiquettes en se
rapprochant les unes des autres. Et nous pouvons alors regarder que nous faisons des changements verticaux que ce qui était 37 est maintenant devenu huit pixels ou être ou huit pixels de l'endroit où se trouve l'étiquette du titre. Donc, si je veux les déplacer un peu plus, disons, euh 123456789 10 et maintenir un espace de 18. Je peux le faire ici et aussi à Si je sélectionne mon étiquette de type de tâche, je vois qu'il a également ses huit pixels de la date d'échéance. Donc, si je veux maintenir cet espacement égal, je peux aller de l'avant et sélectionner la date d'échéance. Augmentez l'axe y plus, ce qui le pousse vers le bas. Je pourrais le faire par une valeur de 10 et puis je peux revenir en arrière et vérifier que le type pourrait voir cela. Ok, il est à 17 ans donc je dois en faire une de plus,
et je pourrais maintenir cet espacement de 18 entre tous. Donc, une fois que nous avons fait cela, ce que nous pouvons faire est de sélectionner chacun d'entre eux à nouveau, et nous pouvons tous les faire glisser ensemble et vraiment chercher ce centre. Le guide de mise en page vous montrera où il ISS à ce stade. Ce que nous pouvons ensuite faire, c'est avec tous sélectionnés, nous pouvons avoir plusieurs contraintes en même temps. Donc, disons que nous voulons ajouter un début et la contrainte de fin de sorte que 16 loin de chaque guide de
mise en page, Allons-y et disons Nous voulons fixer la hauteur à 55 pour chacun d'entre eux. Allons ajouter ceci pour voir ce qui se passe. Donc on a presque un problème ici parce qu'il y a encore des informations. La mise en page automatique doit comprendre où les positionner. Et si nous regardons les mesures aériennes réelles que nous obtenons, nous avons besoin d'une contrainte pour la position Y. Donc ce que nous voulons faire, c'est essayer de dire,
Hey, Hey, mise en page
automatique. Nous voulons un médecin, chacune de ces étiquettes, exactement où elles sont à leur axe Y juste ici dans ce contrôleur de vue particulier. Donc, si nous allons de l'avant et sélectionnons tous en même temps, et ensuite nous descendons ici sur le bouton pour une ligne, ce que nous pouvons faire ici est de cocher verticalement dans le conteneur, mais ne pas aller de l'avant et frapper tout de suite. Vous verrez ici que la valeur actuelle est définie sur zéro Maintenant, si elle est définie sur zéro, ce qui va arriver est qu'il va positionner verticalement tout dans le centre mort parce que ce sera l'axe zéro ici pour cette vue. Contrôleur allumé. On ne veut pas faire ça, car qu'arrivera-t-il si je le fais ? On ne veut pas ça. C' est indésirable. Donc j'allais frapper la commande Z ou juste éditer, euh, annuler et je vais te montrer ce qu'on a besoin d'ajouter pour ça. Donc on veut vraiment Dio c'est refaire ce qu'on a fait, mais bien ici. Cochez verticalement. Mais allez dans cette liste déroulante et utilisez la valeur de canevas actuelle. Avec ce dicton est, prendre la position blanche pour chacun de ces étiquettes vous je et qui va être là où il est positionné verticalement, puis a ajouté les trois contraintes et vous pouvez voir qu'ils restent là où ils sont maintenant tous nos avertissements disparaissent parce qu'ils sont bien positionnés. Maintenant, voici le jour important. Donc, en ce moment, on fait toujours ça c'est un iPhone huit. Disons que nous descendons à la plus petite taille de l'appareil, qui est l'iPhone quatre s, et allons ensuite travailler. Regardez notre titre et allons voir l'inspecteur actuel ici et ajouter un de nos
titres plus longs . Et si vous vous souvenez du titre par défaut pour un, nous avions prévu un voyage en Espagne. Maintenant, tu vois, c'est un problème. Hum, notre texte est coupé parce que la pensée est trop grande pour l'avec de l'appareil. Maintenant, si on retourne à un iPhone 8, ce n'est pas un problème. Nous avons assez de biens immobiliers pour gérer ça maintenant. Heureusement, il y a une solution facile pour cela,
et ce que nous pouvons faire ici, c'est si vous avez l'étiquette sélectionnée Affaiblir, passez sous le rétrécissement automatique ici et voyez comment il définit une taille de police fixe. Nous pouvons changer cela à une échelle de pensée minimale ou une taille de police minimale, donc je vais sélectionner la taille minimale de police et vous verrez ici qu'elle est définie sur une
valeur par défaut de 16 et tout d'un coup notre étiquette s'insère maintenant dans un iPhone pour s. Maintenant, si on remonte à un plus. Il revient à la taille de police la plus élevée à 32. Et si c'est bien maintenant, disons que nous allons sur un iPad et qu'il suffit de jeter un coup d'oeil là-bas et que vous pourriez voir que nous
utilisons toujours la taille maximale que nous avons définie comme 32. Et nous sommes au centre de la verticale sur l'écran où nous le voulions. Donc, on pourrait même monter un peu plus cette taille amusante. Peut-être, Ah, 35. Et nous allons revenir à l'iPhone pour S et vous pouvez voir qu'il est toujours à l'échelle de la
pensée appropriée pour la taille de l'appareil, ce qui est génial. Nous sommes donc prêts à brancher les deux dernières étiquettes pour le type de tâche à la date d'échéance et avant d'échanger les points de vente. Une chose que nous devons nous assurer, c'est de retourner dans notre tâche ici. Et si vous vous souvenez, nous avons d'abord fait démarrer ce privé privé afin qu'aucune autre classe ne puisse y
accéder. Cela n'a pas besoin d'accéder à ces propriétés. Eh bien, maintenant nous avons besoin d'y accéder parce que nous les lions à l'interface. Donc, nous devons faire est de changer la date d'échéance de privé à interne, donc nous pouvons simplement supprimer privé et interne est le modificateur d'accès par défaut, et maintenant nous allons pouvoir y accéder pour faire cette liaison. Donc, une fois que vous avez fait cela, revenons au contrôleur de vue détaillé ici et commençons à créer nos points de vente pour les deux
autres étiquettes. Alors je vais Teoh, allez-y et contrôlez. Cliquez sur et ça va être l'étiquette de type de tâche, et je vais aussi croire que j'ai peut-être supprimé cette connexion. Laissez-moi remettre cela au titre du test ici et ensuite aussi faire pour la date d'échéance. Et maintenant, nous avons toutes ces connexions en place. Allons de l'avant et créons une nouvelle fonction, interface de configuration funk
privée, et ce que nous pouvons faire ici est à la place de cela, si let tâche est égale tâche, nous allons juste aller de l'avant et couper cela. Pour le moment. On va appeler configure l'interface utilisateur en vue. charge à l'intérieur de la méthode va coller que si laissez Jack ici, et la raison pour laquelle nous faisons que Jack est parce que la tâche est facultative. Nous voulons nous assurer que nous avons réellement une tâche avant de commencer à faire n'importe quel type d' opérations qui pourraient potentiellement être contraignantes, pas de valeurs et provoquer un plantage de type d'exécution. Donc maintenant que nous avons, ah, vous savez, suivi et déballé notre tâche
avec succès, allons de l'avant et commençons à l'accrocher. Donc, en commençant par le titre, nous pourrions faire le niveau de titre de tâche. Le texte obtenu est égal au titre du point de la tâche. De même, nous pouvons faire l'étiquette de type de tâche que les gens de texte est le point de type de point de tâche pour toutes les valeurs a apporté de la valeur parce que c'est un e newme. C' est un type de chaîne dans les mauvaises valeurs, la représentation de chaîne de cette énumération. Et enfin, pour l'étiquette de date d'échéance de la tâche. Nous allons utiliser une date pour la matière parce que si vous vous souvenez point de tâche, je vais devoir appuyer sur commande pour être ici parce que nous devons compiler dans ce changement que nous avons fait pour que la date soit interne. Donc maintenant, si je fais un point de tâche, vous pouvez voir la date d'échéance arrive et c'est une date de type, donc ce n'est pas une valeur de chaîne, donc nous devons la convertir afin que nous puissions faire une date pour la question. Laissez la date pour la matière est égale à une date pour la matière, et nous allons définir ce format de date un format au même format que nous avons utilisé à partir du
Créateur de tâche d'entrée et mettre peu de contrôleur. C' était donc une majuscule M m minuscule D D D et minuscule. Pourquoi ? Pourquoi, Pourquoi, pourquoi ? Et enfin, ce que nous pouvons faire ici, c'est la tâche. Étiquette de date d'échéance, pas de texte égal à la date de la chaîne de matière de date. Le jour passera est la date d'échéance du point de tâche. Maintenant, avant de tout courir, réparons une dernière chose. L' avis ici que le contrôleur de vue de détail et le storyboard a un bouton de retour bleu, et il ne correspond pas vraiment au thème de notre style noir sur jaune. Maintenant, si vous vous souvenez, euh, si vous vous souvenez, cette barre de navigation vient du contrôleur de navigation parce qu'elle est héritée parce qu' elle est intégrée dans cette hiérarchie. Donc, une solution rapide pour cela est que nous pouvons réellement définir une tente globale sur la barre de navigation pour être
en fait une couleur différente. Donc, si vous allez et sélectionnez votre contrôleur de navigation et vous allez ici et sélectionnez la barre de
navigation que nous pouvons faire est d'aller dans l'inspecteur d'attribut de la barre, descendre sous mot, dit vue ici. Rechercher tente intention de mettre à ce bleu ici est une valeur par défaut, mais nous pouvons changer cela à une couleur différente. On peut le changer en noir, par
exemple. Et quand on va faire
ça, ce sera un bouton de retour noir. Aussi avant de l'exécuter. Testez une chose de plus dans le contrôleur de vue de détail. Il y a une propriété appelée Title et si vous lisez ici, c'est un s local pendant qui représente à la vue que ce contrôleur gère. Si nous définissons ceci, allons juste détail de la tâche dio. Eh bien, en fait, vu
la barre de navigation, le titre réel apparaît ici au centre pour qu'on puisse donner à ce
Ah, un
peu plus d' Ah, informations sur l'écran On est sur. Et nous voulons faire un dernier changement. Retournez à la liste de faire le contrôleur de vue de table et juste pour que nous puissions tester rapidement cela , nous allons de l'avant et un commentaire, déconstruire la méthode de source de données juste pour remettre les tâches statiques que nous avions créées. Et maintenant, allons de l'avant et lançons cette auberge un iPhone SG, qui est une taille d'écran plus petite juste pour vérifier que tout est à la recherche et agit comme nous nous y
attendions . Teoh. Alors nous allons de l'avant et cliquez sur l'un des plus longs comme la planification Voyage à l'horizon et vous pouvez voir ici qui sont de retour Bouton est noir. La tâche de détail titre apparaît ici au centre de notre barre de navigation, et nous pourrions voir notre voyage de planification de texte en Espagne. Ça a l'air bien. Il n'est pas recadré. Revenons à celui-ci. Ça a l'air plutôt bien. Et maintenant, essayons d'en créer un. Alors appelez cette nouvelle tâche et j'allais m'assurer que mon clavier est basculé ici. Nous mettrons ça dans l'étude dans la catégorie. Ne dis pas que c'est dû dans quelques jours. Je ne l'ai pas créé. Et voici donc notre nouveau test qui a été mis en bas parce que nous avions nos tâches
définies statiquement chargées ici. Si nous entrons dans cette nouvelle tâche de test en étudiant et c'est la date d'échéance que nous avions fixée. Donc, il semble que tout fonctionne comme prévu,
21. Ajouter les touches de polissage: maintenant, dans la phase finale de notre tutoriel, nous voulons rendre notre look un peu meilleur, en particulier sur notre contrôleur de vue de table de liste à faire. Plus précisément, nous voulons faire trois choses. Nous voulons ajouter un titre en haut de notre barre de navigation. Nous voulons rendre ces cellules un peu plus petites verticalement, puis quand nous n'avons pas de cellules dans notre vue de tableau ou une liste vide, nous voulons avoir une vue d'arrière-plan qui affiche une étiquette indiquant que nous devons ajouter des données à notre table. Commençons donc d'abord avec l'arrière-plan de vous sur notre vue de table, et ce que nous allons faire, c'est nous allons créer une étiquette, mais nous ne créerons pas d'étiquette dans le storyboard. Nous allons le faire par programme. Donc, la première chose que nous allons faire est d'aller à la table de liste des choses à faire de votre contrôleur et de commenter notre méthode de source de données de construction ici, et nous allons aller de l'avant et jeter un oeil à ce que nous avons en ce moment quand nous avons notre source de données commentaires, et donc nous avons juste une vue blanche. Nous n'avons vraiment rien ici qui indique que nous avons des listes vides. On ne voit rien. Montez. Alors maintenant, allons de l'avant et jetons un coup d'oeil à une propriété très intéressante sur la vue de table U I . Donc ce que je vais faire ici, ce sont juste des commandes. Cliquez sur n'importe quelle table d'utilisation de U I. Je me suis confiné et sauté à la définition et à l'intérieur de la vue de table. Je cherche une propriété appelée arrière-plan Byuk, et si nous lisons la documentation ici, c'est un optionnel que vous avez vous et l'arrière-plan, vous serez automatiquement redimensionné pour suivre la taille de la vue de table. Cela sera placé en tant que sous-vue de la vue de table derrière toutes les cellules, les en-têtes et les pieds de page, et c'est exactement ce que nous allons utiliser. Nous allons créer une étiquette par programme, qui dérive de vous, je vois,
et nous allons définir cette étiquette comme vue d'arrière-plan pour notre vue de table. Revenons donc dans le nouveau contrôleur et commençons à l'implémenter. Maintenant, allons de l'avant et implémentons une nouvelle fonction ici afin que nous allons de l'avant et créer fonction appelée affichage funk privé, message de vue de table
vide. En fait, je viens juste d'afficher la vue de la table dira que le paramètre est le message parce que c'est un peu plus clair dans notre nommage de méthode ici. Donc, une fois que nous aurons fait ça, nous allons transmettre un message. Nous allons créer une étiquette, puis nous allons définir cela sur les vues de table, vue arrière-plan. Donc, commencer va créer une étiquette comme celle-ci. Laissons vide, euh, laissez l'étiquette d'info de fin égale à I label si vous vous souvenez de vous, j'étiquette est ce que nous ferions glisser à partir du storyboard sur l'un de nos contrôleurs de vue dans l'interface Builder. Donc, essentiellement, tout ce que nous faisons est de créer l'un de ces programmes par programme. Et si vous voyez ici, cette petite boîte, le rectangle, les coins, c'est
ce qu'on appelle le cadre englobant, aussi appelé le rebond, um, ou le cadre. Et donc, essentiellement, c'est de quoi consiste une étiquette, ou tout ce que je vois comme élément. C' est une sorte de contrôle avec une position d'une boîte. Il est coordonné x y dans la hauteur. Et donc quand nous créons une étiquette, si vous voyez ici, nous avons quelques initialiser er's nous avons une étiquette u I juste vide étiquette Brett, Et puis nous en avons un avec un cadre et un avec un codeur. Donc, puisque nous ne ferons aucune sorte d'archivage à partir de données, nous n'allons pas utiliser la méthode du codeur. Normalement, nous pourrions utiliser la méthode frame. Et quand nous disons dit un cadre, nous sommes vraiment en train de dire que je veux mettre un X et un Y en hauteur. Donc, par
exemple, si je disais que je veux que ce soit à 100 X, peut-être 100 pourquoi et 200 dans 50 et hauteur, Eh bien, je pourrais revenir de façon équivalente dans le storyboard, et je pourrais jeter un oeil ici, et je pourrais réellement les régler en manipulant les X et Y à l'intérieur de la hauteur pour
voir visuellement à quoi cela pourrait ressembler. Et je pourrais faire exactement la même chose dans le code en utilisant le siège vous ériger. J' étiquette initialisé avec le cadre juste ici, mais la bonne chose est, nous n'avons même pas besoin de passer par le calcul hors cadre parce que tout comme la documentation , dit la vue d'arrière-plan de la table, vous allez automatiquement dimensionner le que vous vivez ou l'étiquette ou le contrôle pour tenir à l'intérieur de la vue d'arrière-plan, sorte que nous pouvons simplement créer une étiquette U I comme ceci. Maintenant, allons de l'avant et créer l'affectation afin que nous puissions faire un tableau de vous point Vue d'arrière-plan est
égal au niveau d'info et juste là, nous avons fait l'affectation, mais nous n'avons pas encore fait. Nous devons aller de l'avant et définir le texte et configurer notre étiquette. Donc, ce que nous pouvons faire ici, à
côté de définir le texte, pensez que l'étiquette ne texte pas égal au message. Donc, juste là. Jusqu' à présent, si bien. Maintenant, nous devons définir quelques choses de plus. Nous voulons que le texte soit centré. Nous ne voulons pas qu'elle soit justifiée, une droite justifiée. Donc, ce que nous pouvons faire ici est de chercher des informations, d' étiqueter l'alignement du texte des points, et nous pouvons définir cela égal au centre des points. De plus, nous voulons définir le nombre de lignes à zéro car si nous avons un message très long, nous voulons ne pas couper notre étiquette. Um, pour une ligne, nous voulions répandre sur plusieurs lignes,
donc en la mettant à zéro, cela permettra dans cette situation autant de lignes que les messages longs. Maintenant, allons de l'avant et mettre la pensée Donc nous pouvons faire ici est sur l'étiquette info. Il a une propriété appelée police eso. C' est au I police et nous pouvons créer cela par programme Tout comme nous pourrions définir un
constructeur d'interface comme celui-ci Vous j'ai trouvé que nous allons utiliser le nom et la taille d'Isar initiaux donc nous utilisions je pense que Helvetica nouveau et je pense que sur la plus grande étiquette sur cette cellule de table était audacieux afin que nous
puissions essayer cela ici et voir à quoi cela ressemble. Il dira qu'il peut être à une taille de 20. Juste pour qu'il soit grand et se démarque. Tu sais, cette tique, euh, a mal
orthographié ? Ça a l'air droit. Notre fonction ici semble plutôt bonne, mais nous devons quand même comprendre où appelons-nous ça ? Maintenant, il y a quelques possibilités ici,
mais une possibilité vraiment intéressante,du mais une possibilité vraiment intéressante, moins dans cet exemple, parce que nous n'avons qu'une seule section de notre vue de table est dans notre nombre de lignes et de section. Um et ainsi une section peut constituer regroupement de données et vous pouvez en avoir plus d'une maintenant si nous avions plus d'une section dans notre vue de tableau. Nous pourrions avoir différents types de données plutôt qu'un seul tableau d'un type particulier. Maintenant, ce qu'il faut garder à l'esprit, c'est qu'il faut toujours vérifier. Eh bien, quand voulons-nous afficher ce tableau de votre message ? Eh bien, vraiment, nous voulons l'afficher à tout moment ou la vue de table est vide. Comment pouvons-nous savoir si notre vue de table est vide ? Eh bien, notre source de données sera probablement nulle pour le compte, et c'est exactement ce que nous pouvons faire. Donc, si nous allons dans le nombre de lignes dans la section ici et dire si la source de données qui comptent est égale zéro ou une vue de table vide, alors allez-y et affichez le message de vue de table vide. Et ce que nous pouvons dire, c'est de faire des tâches. Et puis, en supposant que la source de données qui comptent est supérieure à zéro dans ce cas, la vue d'arrière-plan de la vue de table que nous avons dit de connaître afin qu'elle n'ait pas l'étiquette. Il saura comment il n'aura pas de vue associée. Il va réellement rendre les données. Donc, chaque fois que nous ajoutons ou supprimons des éléments et fondamentalement rechargeons la source de données. Cette méthode sera appelée et ensuite nous ferons la vérification ici. Et puis si nous n'avons rien dans la vue de tableau, affichera notre message. Si nous avons des choses, va supprimer notre message d'affichage. Maintenant, allons tester ça et voir à quoi ça ressemble. Voilà à quoi ça ressemble et ça a l'air bien. Nous pouvons faire un peu mieux parce que cet audacieux se distingue vraiment. Hum et ah, l'embarquement n'est peut-être pas le meilleur. Donc, revenons dans le contrôleur de vue ici au lieu d'audacieux pour ce plaisir. Utilisons une lumière légère, euh, taille à la place et au lieu de le faire, essayons simplement créer des tâches. Laissons ça une fois de plus avec ces changements et voyons si ça semble un peu mieux du point de vue de vous aux. Et je pense que ça a l'air beaucoup, beaucoup mieux. Donc nous avons cet ensemble. On est prêts à y aller. Ah, et maintenant allons de l'avant et essayons d'ajouter un titre à la barre de navigation, et nous pouvons simplement le faire si vous vous souvenez de la façon dont nous l'avons fait en détail. View Controller est interviewé Load. Nous pourrions aller de l'avant et définir cette propriété title sur le contrôleur View à une valeur de chaîne. Dans ce cas, il pourrait être logique de simplement dio pour faire la liste. Simple comme ça. Et maintenant, allons de l'avant et lançons cela et voyons à quoi cela ressemble avec la liste à faire définie pour le titre. Look et maintenant pour un changement final, Ce que nous allons faire est d'aller de l'avant et rare la méthode de source de données de construction juste parce que affaiblir rapidement, jeter un oeil à tout ici et voyons si nous pouvons nous rendre un peu plus petit pour diminuer l'espacement vertical que nous avons entre eux ici. Revenons donc dans le storyboard principal et jetons un oeil à la sous-classe de cellule que nous avons sur le contrôleur de vue de table de liste à faire et quand nous allons de l'avant et sélectionnons notre cellule ici et jetons un coup d'oeil à, euh, taille réelle de celui-ci ici, donc nous avons réglé cela à une hauteur de 1 45 Maintenant, au départ, cela semble assez correct, mais comme nous avons commencé à développer cela plus loin, il semblait que cela pourrait juste être un peu trop grand pour juste comment notre les structures de données sont. Donc, si nous voulons une diminution qui se cache verticalement, nous devrons déplacer quelques choses autour. À partir de là, nous pouvons prendre notre étiquette de sous-titres ici et faire un petit peu, juste un peu jusqu'au bas de l'étiquette de titre. Et rappelez-vous que ces avertissements Ah orange disent que nos contraintes sont toujours là. Mais nous avons déplacé notre cadre ici, donc nous devons aller de l'avant et mettre à jour le cadre, ce qui le remettrait alors ici, ce que nous ne voulons pas le faire ou mettre à jour les contraintes pour le positionner là où le nouveau cadre est cela maintenant. Donc, avec l'étiquette sélectionnée Weaken, allez ici à la résolution des problèmes de mise en page automatique et juste eu des constantes de mise à jour, de
contrainte, et je vais aller de l'avant et prendre soin de cela pour nous. Maintenant, si nous revenons à la hauteur de la rangée, commençons à diminuer cela un peu à la fois. Essayez d'obtenir quelque chose qui semble OK maintenant. On dirait que nos étiquettes sont un peu ébranlés là-bas. C' est bon. Laissons tomber à 20 ans, puis nous allons continuer et prendre cette étiquette une fois de plus, ramener, la
ramener,un
peu plus loin ici, et je pense que nous pourrions faire un peu mieux. Allons de l'avant et prenons cette vente et ramenons-le à 15 ans et voyons à quoi ça ressemble. Nous allons prendre ce titre, capable à nouveau détruit et le déplacer avec la disposition. Les lignes directrices nous alignent, Doc, et nous mettrons à jour les contraintes de la même façon que nous l'avons fait. Et voyons à quel point cette étiquette est loin de l'étiquette de titre, nous allons
donc la sélectionner. Nous allons passer ici à ce bouton et recevoir qui étaient exactement pour loin de la prochaine étiquette. Donc c'est assez proche. Presque le toucher. C' est très bien. Donc, cela aura l'air mieux visuellement que ce que nous avions auparavant. Rappelez-vous ici, même si nous avons mis à jour cette hauteur de ligne à 1 15, nous devons également aller de l'avant et le faire dans le contrôleur de
vue car il retourne une hauteur de ligne de 1 45 parce que nous n'avons pas mis à jour , et cela remplacer ce 1 15 ici et rendre notre table de vous vendre mauvais look d'un point de vue
visuel. Donc, si nous revenons dans le contrôleur de vue de table de liste à faire. Le dernier changement sera qu'il a transformé ce 1 45 en 1 15 Maintenant, allons de l'avant et lançons ceci dans le simulateur et voyons à quoi il ressemble. Cela semble beaucoup mieux,
beaucoup moins de gaspillage dans l'espace. Et nous allons de l'avant et les commentaires sont construits méthode de source de données ici et de créer une tâche du début à la fin avec tous nos changements ici et C sont terminés application. Donc Grayson tâches terminer le revêtement du projet et l'a dit pour demain. Oui, bien, super. Regarde ça. Ça a l'air plutôt bien. Nous avons tout réglé comme nous le voulons, et il semble beaucoup mieux que ce que nous avions auparavant.