Zoeken…
Wijzig tekst
Snel
textView.text = "Hello, world!"
Doelstelling C:
textView.text = @"Hello, world!";
Toegeschreven tekst instellen
// 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
Wijzig tekstuitlijning
Snel
textView.textAlignment = .left
Doelstelling C
textView.textAlignment = NSTextAlignmentLeft;
UITextView Methoden verwijderen
Reageren op meldingen bewerken
-
textViewShouldBeginEditing(_:)
-
textViewDidBeginEditing(_:)
-
textViewShouldEndEditing(_:)
-
textViewDidEndEditing(_:)
Reageren op tekstwijzigingen
-
textView(_:shouldChangeTextIn:replacementText:)
-
textViewDidChange(_:)
Reageren op URL
-
textView(_: UITextView, shouldInteractWithURL: NSURL, inRange: NSRange) -> Bool
Wijzig lettertype
Snel
//System Font
textView.font = UIFont.systemFont(ofSize: 12)
//Font of your choosing
textView.font = UIFont(name: "Font Name", size: 12)
Doelstelling C
//System Font
textView.font = [UIFont systemFontOfSize:12];
//Font of your choosing
textView.font = [UIFont fontWithName:@"Font Name" size:12];
Wijzig tekstkleur
Snel
textView.textColor = UIColor.red
Doelstelling C
textView.textColor = [UIColor redColor];
UITextView met HTML-tekst
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 detectie van koppelingen, adressen, datums en meer
UITextView
heeft ingebouwde ondersteuning om verschillende gegevens automatisch te detecteren. De gegevens die automatisch kunnen worden gedetecteerd, omvatten momenteel:
enum {
UIDataDetectorTypePhoneNumber = 1 << 0,
UIDataDetectorTypeLink = 1 << 1,
UIDataDetectorTypeAddress = 1 << 2,
UIDataDetectorTypeCalendarEvent = 1 << 3,
UIDataDetectorTypeNone = 0,
UIDataDetectorTypeAll = NSUIntegerMax
};
Automatische detectie inschakelen
// you may add as many as you like by using the `|` operator between options
textView.dataDetectorTypes = (UIDataDetectorTypeLink | UIDataDetectorTypePhoneNumber);
Indien ingeschakeld, verschijnt de tekst als een hyperlink in de UITextView
Klikbare gegevens
Om toe te staan dat op de link wordt geklikt (wat zal resulteren in verschillende acties afhankelijk van het gegevenstype), moet u ervoor zorgen dat de UITextView
selecteerbaar is maar niet bewerkbaar en dat gebruikersinteractie is ingeschakeld
textView.editable = NO;
textView.selectable = YES;
textView.userInteractionEnabled = YES; // YES by default
Controleer of deze leeg of nul is
Snel
if let text = self.textView.text where !text.isEmpty {
// Do stuff for text
} else {
// Do stuff for nil text or empty string
}
Doelstelling C
if (self.textView.text.length > 0){
// Do stuff for text
} else {
// Do stuff for nil text or empty string
}
De cursorpositie ophalen en instellen
Bruikbare informatie
Het allereerste begin van de tekst in het tekstveld:
let startPosition: UITextPosition = textView.beginningOfDocument
Het einde van de tekst in het tekstveld:
let endPosition: UITextPosition = textView.endOfDocument
Het momenteel geselecteerde bereik:
let selectedRange: UITextRange? = textView.selectedTextRange
Krijg cursorpositie
if let selectedRange = textView.selectedTextRange {
let cursorPosition = textView.offsetFromPosition(textView.beginningOfDocument, toPosition: selectedRange.start)
print("\(cursorPosition)")
}
Cursorpositie instellen
Om de positie in te stellen, stellen al deze methoden eigenlijk een bereik in met dezelfde begin- en eindwaarden.
Naar het begin
let newPosition = textView.beginningOfDocument
textView.selectedTextRange = textView.textRangeFromPosition(newPosition, toPosition: newPosition)
Naar het einde
let newPosition = textView.endOfDocument
textView.selectedTextRange = textView.textRangeFromPosition(newPosition, toPosition: newPosition)
Naar een positie links van de huidige cursorpositie
// 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)
}
}
Naar een willekeurige positie
Begin bij het begin en verplaats 5 tekens naar rechts.
let arbitraryValue: Int = 5
if let newPosition = textView.positionFromPosition(textView.beginningOfDocument, inDirection: UITextLayoutDirection.Right, offset: arbitraryValue) {
textView.selectedTextRange = textView.textRangeFromPosition(newPosition, toPosition: newPosition)
}
Verwant
Selecteer alle tekst
textView.selectedTextRange = textView.textRangeFromPosition(textView.beginningOfDocument, toPosition: textView.endOfDocument)
Selecteer een tekstbereik
// 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!)
}
Tekst invoegen op de huidige cursorpositie
textView.insertText("Hello")
Notes
Dit voorbeeld komt oorspronkelijk uit een aanpassing van dit Stack Overflow-antwoord .
Dit antwoord gebruikt een tekstveld, maar dezelfde concepten zijn van toepassing op
UITextView
.Gebruik
textView.becomeFirstResponder()
om het tekstveld de focus te geven en het toetsenbord te laten verschijnen.Zie dit antwoord voor het verkrijgen van de tekst op een bepaald bereik.
Verwant
- Hoe kan ik een Range in Swift aanmaken (Deals indirect met de vraag waarom we moeten gebruiken
selectedTextRange
hier in plaats van alleenselectedRange
)
Verwijder extra opvullingen om aan een nauwkeurig afgemeten tekst te passen.
UITextView
heeft standaard extra vullingen. Soms is het vervelend, vooral als je wat tekst wilt meten zonder weergave-instantie en ze precies op een bepaald gebied wilt plaatsen.
Doe dit om dergelijke vullingen te verwijderen.
messageTextView.textContainerInset = UIEdgeInsetsZero
messageTextView.textContainer.lineFragmentPadding = 0
Nu kunt u de tekstgrootte meten met NSAttributedString.boundingRectWithSize(...)
en het formaat van een UITextView
aanpassen aan de tekst.
let budget = getSomeCGSizeBudget()
let text = getSomeAttributedString()
let textSize = text.boundingRectWithSize(budget, options: [.UsesLineFragmentOrigin, .UsesFontLeading], context: nil).size
messageTextView.frame.size = textSize // Just fits.