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

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.


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow