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

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.


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow