SDK iOS UITextView et UITextViewDelegate

Dans ce tutoriel sur les bases du SDK iOS, nous allons créer un UITextView, mettre en œuvre le UITextViewDelegate méthodes de protocole, et utilisation NSLog pour voir quand les méthodes sont appelées. Nous verrons également comment limiter le nombre de caractères dans une vue de texte et comment utiliser la touche de retour pour renoncer au clavier. Poursuivez votre lecture pour apprendre à implémenter ces fonctionnalités dans votre application!


Étape 1: Créer un nouveau projet Xcode

Lancez Xcode et cliquez sur Fichier> Nouveau> Projet. Cliquez sur "Application" dans le volet iOS à gauche. Cliquez sur l'icône intitulée "Single View Application" et cliquez sur "Suivant". Dans le champ "Nom du produit", tapez "TextViewARC" et entrez un nom pour votre identificateur d'entreprise, tel que "com.companyName". Choisissez "iPhone" dans le menu "Famille de périphériques". Veillez à décocher "Utiliser les storyboards" et "Inclure les tests unitaires", puis à cocher "Utiliser le comptage automatique des références" avant de cliquer sur "Suivant". Choisissez un emplacement pour stocker votre projet et cliquez sur "Créer".

Dans le champ "Nom du produit", tapez "TextViewARC" et entrez un nom pour votre identificateur d'entreprise, tel que "com.companyName". Choisissez "iPhone" dans le menu "Famille de périphériques". Veillez à décocher "Utiliser les storyboards" et "Inclure les tests unitaires", puis à cocher "Utiliser le comptage automatique des références" avant de cliquer sur "Suivant". Choisissez un emplacement pour stocker votre projet et cliquez sur "Créer".


Étape 2: Créer un UITextView

Un objet UITextView peut être créé par programme (c'est-à-dire dans du code) ou graphiquement avec l'outil Interface Builder. Ce tutoriel montrera brièvement comment créer l'objet avec les deux méthodes..

Par programme

Cliquez sur le fichier "ViewController.m" et tapez le code suivant.

 CGRect textViewFrame = CGRectMake (20.0f, 20.0f, 280.0f, 124.0f); UITextView * textView = [[UITextView all] initWithFrame: textViewFrame]; textView.returnKeyType = UIReturnKeyDone; [self.view addSubview: textView];

Cela crée par programme un UITextView objet et l'ajoute à la vue de la ViewController.

Avec Interface Builder

Vous pouvez également créer un UITextView dans le fichier .xib. Commencez par cliquer sur le fichier .xib dans le volet "Navigateur" de votre fenêtre Xcode. Cliquez sur "Affichage" dans le volet "Structure du document" sur la gauche. Cliquez sur Afficher> Utilitaires> Afficher la bibliothèque d'objets. Faites défiler la bibliothèque d'objets dans le coin inférieur gauche jusqu'à trouver un objet "Vue texte". Cliquez pour la sélectionner, puis faites glisser la vue texte dans la vue. Ajustez la vue du texte afin qu’elle se trouve dans la partie supérieure de la vue et qu’elle mesure environ 125 pixels de haut..


Étape 3: retrait du clavier

La renonciation au clavier lorsque l’arrière-plan est tapé peut être réalisée de différentes manières. Le code ci-dessous est un exemple d'une telle technique. Cliquez sur le fichier "ViewController.m" et ajoutez l'implémentation de méthode suivante:

 - (void) touchesBegan: (NSSet *) touche withEvent: (UIEvent *) événement NSLog (@ "touchesBegan: withEvent:"); [self.view endEditing: YES]; [super touchesBegan: touche withEvent: event]; 

Étape 4: Méthodes de protocole de délégation

En termes simples, un délégué aide deux objets à communiquer l'un avec l'autre. Dans le cas du UITextViewDelegate méthodes, les UITextView est en mesure d'envoyer un message aux méthodes de délégation lorsque certains événements se produisent, par exemple lorsque la vue de texte commence à être modifiée. Lorsque l'une des méthodes est transmise par message, vous avez la possibilité d'effectuer des actions personnalisées. Le suivant UITextViewDelegate les implémentations de méthodes montrent comment vous pourriez vous y prendre.

Avant d'implémenter les méthodes déléguées, revenons en arrière et définissons la affichage déléguer la propriété à soi afin de régler le ViewController objet en tant que délégué du UITextView. Cliquez sur le fichier "ViewController.m". dans le viewDidLoad méthode, où nous avons créé la vue texte par programme, ajoutez le code suivant au-dessus de la [self.view addSubview: textView]; line (vous pouvez toujours vous référer au code source attaché à ce message pour obtenir de l'aide).

 textView.delegate = self;

Pour faire la même chose avec la vue de texte créée dans Interface Builder, cliquez sur le fichier "ViewController.xib". Sélectionnez la vue texte et cliquez sur Afficher> Utilitaires> Afficher l'inspecteur de connexions. Cliquez sur la flèche "Points de vente" dans le volet "Inspecteur de connexions" pour l'ouvrir. Cliquez sur le cercle en regard de "délégué", puis cliquez-déplacez du cercle vers "Propriétaire du fichier" pour établir la connexion entre la vue texte et le ViewController.

Cliquez sur "ViewController.h" et tapez le code suivant pour vous conformer UITextViewDelegate protocole.

 @interface ViewController: UIViewController 

le UITextViewDelegate les méthodes de protocole sont toutes facultatives, ce qui signifie que vous n'avez pas à les implémenter si vous ne les utilisez pas. Parlons des méthodes au fur et à mesure que nous les ajoutons.

textViewShouldBeginEditing: et textViewDidBeginEditing:

Cliquez sur "ViewController.m" et ajoutez le code suivant.

 - (BOOL) textViewShouldBeginEditing: (UITextView *) textView NSLog (@ "textViewShouldBeginEditing:"); retourner OUI;  - (void) textViewDidBeginEditing: (UITextView *) textView NSLog (@ "textViewDidBeginEditing:"); textView.backgroundColor = [UIColor greenColor]; 

La méthode textViewShouldBeginEditing: est appelé juste avant la vue texte devient active. La méthode textViewDidBeginEditing: est appelé quand la vue texte devient active et passe au statut de premier répondant. Les personnalisations de comportement que vous souhaitez activer lorsque la vue de texte devient active doivent être effectuées ici. Dans notre exemple, la couleur d'arrière-plan de la vue texte devient verte lorsque la vue texte est active..

textViewShouldEndEditing: et textViewDidEndEditing:

Ajoutez le code suivant sous les méthodes précédentes.

 - (BOOL) textViewShouldEndEditing: (UITextView *) textView NSLog (@ "textViewShouldEndEditing:"); textView.backgroundColor = [UIColor whiteColor]; retourner OUI;  - (void) textViewDidEndEditing: (UITextView *) textView NSLog (@ "textViewDidEndEditing:"); 

textViewShouldEndEditing: est appelé juste avant la vue texte devient inactive. textViewDidEndEditing: est appelé quand la vue texte devient inactive. Elles sont similaires aux deux méthodes appelées lorsque la vue de texte commence à être modifiée. L'une ou l'autre méthode est un emplacement approprié pour la logique déclenchée lorsque l'utilisateur a terminé sa modification. Dans notre exemple, nous utilisons textViewShouldEndEditing: retourner la couleur de fond à sa couleur normale.

textView: shouldChangeCharactersInRange: replacementString

Ajoutez le code suivant sous les méthodes précédentes.

 - (BOOL) textView: (UITextView *) textView devraitChangeTextInRange: (NSRange) plage replacementText: (NSString *) text NSCharacterSet * doneButtonCharacterSet = [NSCharacterSet newlineCharacterSet]; NSRange replacementTextRange = [plage de texteOfCharacterFromSet: doneButtonCharacterSet]; NSUInteger location = replacementTextRange.location; if (textView.text.length + text.length> 140) if (location! = NSNotFound) [textView resignFirstResponder];  return NO;  else if (location! = NSNotFound) [textView resignFirstResponder]; retourne NO;  retourne OUI; 

Chaque fois qu'un utilisateur tape un caractère sur le clavier, juste avant que le caractère ne soit affiché, la méthode textView: shouldChangeCharactersInRange: replacementString est appelé. Il s'agit d'un emplacement pratique pour tester les caractères saisis par un utilisateur et interdire l'utilisation de caractères spécifiques que vous souhaitez limiter. Dans notre exemple, nous utilisons la touche done pour démissionner du clavier en testant si le texte de remplacement contient l'un des caractères de newLineCharacterSet. Si c'est un personnage du newLineCharacterSet, Ensuite, c'est le bouton Terminé qui a été enfoncé. Le clavier doit donc démissionner. De plus, en testant la longueur actuelle de la vue texte chaque fois qu'un caractère est saisi et en renvoyant NON s'il est supérieur à 140 caractères, la vue de texte devient limitée à 140 caractères.

textViewDidChange:

Ajoutez le code suivant sous les méthodes précédentes.

 - (void) textViewDidChange: (UITextView *) textView NSLog (@ "textViewDidChange:"); 

La méthode textViewDidChange: est appelé uniquement lorsque le texte de la vue texte est modifié par l'utilisateur. Vous pouvez personnaliser divers comportements en fonction du moment où l'utilisateur modifie le texte dans la vue de texte. Vous pouvez par exemple afficher le nombre de caractères restants lorsqu'un affichage texte est limité à 140 caractères. Chaque fois que le texte change, le numéro affiché peut être mis à jour.

textViewDidChangeSelection:

Ajoutez le code suivant sous les méthodes précédentes.

 - (void) textViewDidChangeSelection: (UITextView *) textView NSLog (@ "textViewDidChangeSelection:"); 

La méthode textViewDidChangeSelection: est appelée quand une section de texte est sélectionnée ou que la sélection est modifiée, par exemple lors de la copie ou du collage d’une section de texte. Bien qu'il s'agisse probablement d'une des méthodes de délégation les moins utilisées, dans certaines circonstances, il peut être intéressant de personnaliser le comportement de la vue texte lorsque du texte est sélectionné..


Étape 5: Test des vues de texte

Cliquez sur Construire> Exécuter, ou cliquez sur la flèche "Exécuter" située dans le coin supérieur gauche. Ouvrez la console et explorez la vue texte. le NSLog dans chaque méthode affichera une chaîne dans la console lorsque cette méthode de délégué est appelée.

Voici comment la vue texte apparaît dans le simulateur:


Conclusion

En comprenant quand le UITextViewDelegate méthodes de protocole sont appelées, vous pouvez tirer pleinement parti de la fonctionnalité intégrée au délégué. Si vous trouvez qu'une méthode de délégué n'est pas positionnée au bon endroit dans l'interaction de l'utilisateur, essayez une autre méthode. À un moment donné, vous trouverez la bonne méthode pour placer votre logique et faire en sorte que votre application fonctionne exactement comme vous le souhaitez.!