Recherche…


Changer le texte

Rapide

textView.text = "Hello, world!"

Objectif c:

textView.text = @"Hello, world!";

Définir le texte attribué

// Modify some of the attributes of the attributed string.
let attributedText = NSMutableAttributedString(attributedString: textView.attributedText!)

// Use NSString so the result of rangeOfString is an NSRange.
let text = textView.text! as NSString

// Find the range of each element to modify.
let tintedRange = text.range(of: NSLocalizedString("tinted", comment: ""))
let highlightedRange = text.range(of: NSLocalizedString("highlighted", comment: ""))

// Add tint.
attributedText.addAttribute(NSForegroundColorAttributeName, value: UIColor.blue, range: tintedRange)

// Add highlight.
attributedText.addAttribute(NSBackgroundColorAttributeName, value: UIColor.yellow, range: highlightedRange)

textView.attributedText = attributedText

Changer l'alignement du texte

Rapide

textView.textAlignment = .left

Objectif c

textView.textAlignment = NSTextAlignmentLeft;

Méthodes UITextViewDelegate

Répondre aux notifications de modification

  • textViewShouldBeginEditing(_:)
  • textViewDidBeginEditing(_:)
  • textViewShouldEndEditing(_:)
  • textViewDidEndEditing(_:)

Répondre aux modifications de texte

  • textView(_:shouldChangeTextIn:replacementText:)
  • textViewDidChange(_:)

Répondre à l'URL

  • textView(_: UITextView, shouldInteractWithURL: NSURL, inRange: NSRange) -> Bool

Changer la police

Rapide

//System Font
textView.font = UIFont.systemFont(ofSize: 12)

//Font of your choosing
textView.font = UIFont(name: "Font Name", size: 12)

Objectif c

//System Font
textView.font = [UIFont systemFontOfSize:12];

//Font of your choosing
textView.font = [UIFont fontWithName:@"Font Name" size:12];

Changer la couleur du texte

Rapide

textView.textColor = UIColor.red

Objectif c

textView.textColor = [UIColor redColor];

UITextView avec du texte HTML

NSString *htmlString = @"<p> This is an <b>HTML</b> text</p>";
NSAttributedString *attributedString = [[NSMutableAttributedString alloc]
                                                        initWithData: [htmlString dataUsingEncoding:NSUnicodeStringEncoding]
                                                        options: @{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType }
                                                        documentAttributes: nil
                                                        error: nil
                                                        ];
                _yourTextView.attributedText = attributedString;
                // If you want to modify the font
                field.font = [UIFont fontWithName:@"Raleway-Regular" size:15];

Détection automatique de liens, adresses, dates et autres

UITextView a un support intégré pour détecter automatiquement une variété de données. Les données pouvant être détectées automatiquement comprennent actuellement:

enum {
   UIDataDetectorTypePhoneNumber   = 1 << 0,
   UIDataDetectorTypeLink          = 1 << 1,
   UIDataDetectorTypeAddress       = 1 << 2,
   UIDataDetectorTypeCalendarEvent = 1 << 3,
   UIDataDetectorTypeNone          = 0,
   UIDataDetectorTypeAll           = NSUIntegerMax
};

Activation de la détection automatique

// you may add as many as you like by using the `|` operator between options
textView.dataDetectorTypes = (UIDataDetectorTypeLink | UIDataDetectorTypePhoneNumber);

Si activé, le texte apparaîtra comme un lien hypertexte sur le UITextView

Données cliquables

Pour autoriser le clic sur le lien (ce qui entraînera différentes actions en fonction du type de données), vous devez vous assurer que UITextView est sélectionnable mais pas modifiable et que l'interaction de l'utilisateur est activée

textView.editable = NO;
textView.selectable = YES;
textView.userInteractionEnabled = YES; // YES by default

Vérifiez pour voir si vide ou nul

Rapide

if let text = self.textView.text where !text.isEmpty {
    // Do stuff for text
} else {
    // Do stuff for nil text or empty string
}

Objectif c

if (self.textView.text.length > 0){
    // Do stuff for text
}   else {
    // Do stuff for nil text or empty string
}

Obtenir et définir la position du curseur

Informations utiles

Le tout début du texte du champ de texte:

let startPosition: UITextPosition = textView.beginningOfDocument

La fin du texte du champ de texte:

let endPosition: UITextPosition = textView.endOfDocument

La gamme actuellement sélectionnée:

let selectedRange: UITextRange? = textView.selectedTextRange

Obtenir la position du curseur

if let selectedRange = textView.selectedTextRange {
    
    let cursorPosition = textView.offsetFromPosition(textView.beginningOfDocument, toPosition: selectedRange.start)
    
    print("\(cursorPosition)")
}

Définir la position du curseur

Pour définir la position, toutes ces méthodes définissent une plage avec les mêmes valeurs de début et de fin.

Au début

let newPosition = textView.beginningOfDocument
textView.selectedTextRange = textView.textRangeFromPosition(newPosition, toPosition: newPosition)

Jusqu'à la fin

let newPosition = textView.endOfDocument
textView.selectedTextRange = textView.textRangeFromPosition(newPosition, toPosition: newPosition)

À une position à gauche de la position actuelle du curseur

// only if there is a currently selected range
if let selectedRange = textView.selectedTextRange {
    
    // and only if the new position is valid
    if let newPosition = textView.positionFromPosition(selectedRange.start, inDirection: UITextLayoutDirection.Left, offset: 1) {
        
        // set the new position
        textView.selectedTextRange = textView.textRangeFromPosition(newPosition, toPosition: newPosition)
    }
}

À une position arbitraire

Commencez par le début et déplacez 5 caractères vers la droite.

let arbitraryValue: Int = 5
if let newPosition = textView.positionFromPosition(textView.beginningOfDocument, inDirection: UITextLayoutDirection.Right, offset: arbitraryValue) {
    
    textView.selectedTextRange = textView.textRangeFromPosition(newPosition, toPosition: newPosition)
}

en relation

Sélectionner tout le texte

textView.selectedTextRange = textView.textRangeFromPosition(textView.beginningOfDocument, toPosition: textView.endOfDocument)

Sélectionnez une plage de texte

// Range: 3 to 7
let startPosition = textView.positionFromPosition(textView.beginningOfDocument, inDirection: UITextLayoutDirection.Right, offset: 3)
let endPosition = textView.positionFromPosition(textView.beginningOfDocument, inDirection: UITextLayoutDirection.Right, offset: 7)

if startPosition != nil && endPosition != nil {
    textView.selectedTextRange = textView.textRangeFromPosition(startPosition!, toPosition: endPosition!)
}

Insérer du texte à la position actuelle du curseur

textView.insertText("Hello")

Remarques

  • Cet exemple provient à l'origine d'une adaptation de cette réponse Stack Overflow .

  • Cette réponse utilise un champ de texte, mais les mêmes concepts s'appliquent à UITextView .

  • Utilisez textView.becomeFirstResponder() pour mettre en textView.becomeFirstResponder() le champ de texte et faire apparaître le clavier.

  • Voir cette réponse pour savoir comment obtenir le texte à une certaine distance.

en relation

  • Comment créer une plage dans Swift (traite indirectement de la question de savoir pourquoi nous devons utiliser selectedTextRange ici plutôt que de simplement selectedRange )

Supprimez les rembourrages supplémentaires pour les adapter à un texte mesuré avec précision.

UITextView a des UITextView supplémentaires par défaut. Parfois, c'est embêtant, surtout si vous voulez mesurer du texte sans instance de vue et le placer précisément dans une zone.

Faites ceci pour enlever de tels rembourrages.

messageTextView.textContainerInset = UIEdgeInsetsZero
messageTextView.textContainer.lineFragmentPadding = 0

Vous pouvez désormais mesurer la taille du texte à l'aide de NSAttributedString.boundingRectWithSize(...) et redimensionner un objet UITextView uniquement pour l'adapter au texte.

let budget = getSomeCGSizeBudget()
let text = getSomeAttributedString()
let textSize = text.boundingRectWithSize(budget, options: [.UsesLineFragmentOrigin, .UsesFontLeading], context: nil).size
messageTextView.frame.size = textSize // Just fits.


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow