Suche…
Text ändern
Schnell
textView.text = "Hello, world!"
Ziel c:
textView.text = @"Hello, world!";
Attributierten Text festlegen
// 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
Textausrichtung ändern
Schnell
textView.textAlignment = .left
Ziel c
textView.textAlignment = NSTextAlignmentLeft;
UITextViewDelegate-Methoden
Antworten auf das Bearbeiten von Benachrichtigungen
-
textViewShouldBeginEditing(_:)
-
textViewDidBeginEditing(_:)
-
textViewShouldEndEditing(_:)
-
textViewDidEndEditing(_:)
Antworten auf Textänderungen
-
textView(_:shouldChangeTextIn:replacementText:)
-
textViewDidChange(_:)
Auf URL antworten
-
textView(_: UITextView, shouldInteractWithURL: NSURL, inRange: NSRange) -> Bool
Schriftart ändern
Schnell
//System Font
textView.font = UIFont.systemFont(ofSize: 12)
//Font of your choosing
textView.font = UIFont(name: "Font Name", size: 12)
Ziel c
//System Font
textView.font = [UIFont systemFontOfSize:12];
//Font of your choosing
textView.font = [UIFont fontWithName:@"Font Name" size:12];
Textfarbe ändern
Schnell
textView.textColor = UIColor.red
Ziel c
textView.textColor = [UIColor redColor];
UITextView mit HTML-Text
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];
Automatische Erkennung von Links, Adressen, Datumsangaben und mehr
UITextView
unterstützt die automatische Erkennung einer Vielzahl von Daten. Zu den Daten, die derzeit automatisch erkannt werden können, gehören:
enum {
UIDataDetectorTypePhoneNumber = 1 << 0,
UIDataDetectorTypeLink = 1 << 1,
UIDataDetectorTypeAddress = 1 << 2,
UIDataDetectorTypeCalendarEvent = 1 << 3,
UIDataDetectorTypeNone = 0,
UIDataDetectorTypeAll = NSUIntegerMax
};
Aktivieren der automatischen Erkennung
// you may add as many as you like by using the `|` operator between options
textView.dataDetectorTypes = (UIDataDetectorTypeLink | UIDataDetectorTypePhoneNumber);
Wenn aktiviert, wird der Text in der UITextView
als Hyperlink UITextView
Anklickbare Daten
Damit der Link angeklickt werden kann (was je nach Datentyp zu unterschiedlichen Aktionen führt), müssen Sie sicherstellen, dass die UITextView
auswählbar aber nicht bearbeitbar ist und die Benutzerinteraktion aktiviert ist
textView.editable = NO;
textView.selectable = YES;
textView.userInteractionEnabled = YES; // YES by default
Überprüfen Sie, ob leer oder null ist
Schnell
if let text = self.textView.text where !text.isEmpty {
// Do stuff for text
} else {
// Do stuff for nil text or empty string
}
Ziel c
if (self.textView.text.length > 0){
// Do stuff for text
} else {
// Do stuff for nil text or empty string
}
Cursorposition abrufen und einstellen
Nützliche Informationen
Ganz am Anfang des Textfeldes:
let startPosition: UITextPosition = textView.beginningOfDocument
Ganz am Ende des Textfeldes:
let endPosition: UITextPosition = textView.endOfDocument
Der aktuell ausgewählte Bereich:
let selectedRange: UITextRange? = textView.selectedTextRange
Cursorposition abrufen
if let selectedRange = textView.selectedTextRange {
let cursorPosition = textView.offsetFromPosition(textView.beginningOfDocument, toPosition: selectedRange.start)
print("\(cursorPosition)")
}
Cursorposition einstellen
Um die Position festzulegen, setzen alle diese Methoden tatsächlich einen Bereich mit den gleichen Start- und Endwerten.
Zu Beginn
let newPosition = textView.beginningOfDocument
textView.selectedTextRange = textView.textRangeFromPosition(newPosition, toPosition: newPosition)
Bis zum Ende
let newPosition = textView.endOfDocument
textView.selectedTextRange = textView.textRangeFromPosition(newPosition, toPosition: newPosition)
An eine Position links von der aktuellen Cursorposition
// 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)
}
}
Zu einer beliebigen Position
Beginnen Sie am Anfang und verschieben Sie 5 Zeichen nach rechts.
let arbitraryValue: Int = 5
if let newPosition = textView.positionFromPosition(textView.beginningOfDocument, inDirection: UITextLayoutDirection.Right, offset: arbitraryValue) {
textView.selectedTextRange = textView.textRangeFromPosition(newPosition, toPosition: newPosition)
}
verbunden
Markieren Sie den gesamten Text
textView.selectedTextRange = textView.textRangeFromPosition(textView.beginningOfDocument, toPosition: textView.endOfDocument)
Wählen Sie einen Textbereich aus
// 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!)
}
Fügen Sie den Text an der aktuellen Cursorposition ein
textView.insertText("Hello")
Anmerkungen
Dieses Beispiel stammt ursprünglich aus einer Anpassung dieser Stack Overflow-Antwort .
Diese Antwort verwendet ein Textfeld, jedoch gelten dieselben Konzepte für
UITextView
.Verwenden Sie
textView.becomeFirstResponder()
, um den Fokus auf das Textfeld zu legen und die Tastatur erscheinen zu lassen.In dieser Antwort erfahren Sie, wie Sie den Text in einem bestimmten Bereich erhalten.
verbunden
- So erstellen Sie einen Bereich in Swift (beschäftigt sich indirekt mit der Frage, warum wir
selectedTextRange
hier anstelle vonselectedRange
)
Entfernen Sie zusätzliche Füllungen, um einen genau gemessenen Text zu erhalten.
UITextView
hat standardmäßig zusätzliche Auffüllungen. Manchmal ist es ärgerlich, vor allem, wenn Sie Text ohne Ansichtsinstanz ausmessen und ihn genau in einem Bereich platzieren möchten.
So entfernen Sie solche Polsterungen.
messageTextView.textContainerInset = UIEdgeInsetsZero
messageTextView.textContainer.lineFragmentPadding = 0
Jetzt können Sie die Textgröße mit NSAttributedString.boundingRectWithSize(...)
messen und die Größe einer UITextView
, um sie an den Text UITextView
.
let budget = getSomeCGSizeBudget()
let text = getSomeAttributedString()
let textSize = text.boundingRectWithSize(budget, options: [.UsesLineFragmentOrigin, .UsesFontLeading], context: nil).size
messageTextView.frame.size = textSize // Just fits.