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 entextView.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 simplementselectedRange
)
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.