UITextView: Was ist das, mehrzeilige Eingabe und Funktionsprinzip

Autor: IT Sectr Veröffentlicht: 2026-07-07 Lesezeit: 8 Min.

UITextView ist eine mehrzeilige Textkomponente von UIKit, die von UIScrollView erbt und die Bearbeitung von attributiertem Text mit eingebetteten Links und Bildern unterstützt. Laut Apple Developer Dokumentation (2025) bietet UITextView UITextViewDelegate mit Callbacks textViewDidChange, shouldInteractWithURL und shouldInteractWithTextAttachment zur Interaktionsbehandlung. Im Gegensatz zu UITextField unterstützt UITextView Scrollen, Textstile via typingAttributes und dataDetectorTypes zur automatischen Erkennung von Links, Adressen und Daten. Dies ist die Hauptkomponente zum Anzeigen von Inhalten und zur Eingabe von mehrzeiligem Text in iOS-Anwendungen.

Wichtige Punkte

  • UITextView — mehrzeiliges Textfeld in UIKit, Erbe von UIScrollView mit Bearbeitungsunterstützung
  • NSAttributedString — attributierte Textunterstützung: Schriftarten, Farben, Zeilenabstand, Links
  • UITextViewDelegate — Verwaltung via textViewDidChange, shouldInteractWithURL, didBeginEditing
  • Data Detector Types — automatische Erkennung von Links, Adressen, Daten, Telefonnummern
  • Text Container — textContainer-, exclusionPaths- und lineFragmentPadding-System für benutzerdefiniertes Layout

Was ist UITextView

UITextView ist eine UIKit-Komponente zur Anzeige und Bearbeitung von mehrzeiligem Text. Im Gegensatz zu UILabel unterstützt UITextView Textauswahl, Bearbeitung, Scrollen bei überschreitendem Inhalt und attributierten Text. Als Unterklasse von UIScrollView enthält UITextView automatisch vertikales und horizontales Scrollen bei Inhaltsüberlauf — dies wird über isScrollEnabled konfiguriert. Die Klasse unterstützt die Bearbeitung über die Eigenschaft isEditable: setzen Sie auf false für den Nur-Lese-Modus. UITextView arbeitet mit NSLayoutManager über das TextKit-System: NSTextStorage (Speicherung von attributiertem Text) → NSLayoutManager (Zeilenlayout) → NSTextContainer (Geometrie des Textbereichs). Diese Architektur ermöglicht benutzerdefinierte Layouts mit Bildumfließung, mehrspaltigem Text und komplexen Textlayouts. UITextView wird zur Anzeige von Artikeln, Beschreibungen, Protokollen, Kommentaren und jedem mehrzeiligen Text in iOS verwendet.

UITextView vs UITextField: Hauptunterschiede

Der Unterschied zwischen UITextView und UITextField geht weit über die Zeilenanzahl hinaus. UITextField ist ein einzeiliger UIControl mit Platzhalterunterstützung, linken/rechten Ansichten und Löschtaste. UITextView ist ein mehrzeiliger UIScrollView mit einem vollständigen TextKit-System für attributierten Text. UITextField unterstützt NSAttributedString nicht auf Anzeigeebene (nur via attributedText mit Einschränkungen), UITextView verarbeitet NSAttributedString vollständig mit verschiedenen Schriftarten, Absatzstilen und eingebetteten Bildern. UITextField verfügt über eine integrierte Löschtaste (clearButtonMode), UITextView nicht — eine benutzerdefinierte Implementierung ist erforderlich. UITextField passt sich automatisch an den Inhalt an (intrinsicContentSize), UITextView erfordert manuelle Höhenverwaltung durch contentSize-Beobachtung oder Auto-Layout-Einschränkungen. UITextView unterstützt dataDetectorTypes (automatische Linkerkennung), UITextField unterstützt es ab iOS 16+. Für mehrzeilige Texteingabe (Kommentare, Notizen, Nachrichten) wählen Sie UITextView. Für Formularfelder (Name, E-Mail, Passwort) verwenden Sie UITextField.

FunktionUITextViewUITextField
ZeilenMehrzeiligEinzeilig
PlatzhalterNein (benutzerdefiniert)Integriert
TextattributeVollständiger NSAttributedStringEingeschränkt
Data DetectorsVollständige UnterstützungiOS 16+
Inline-BilderÜber NSTextAttachmentNicht unterstützt
ScrollenIntegriert (UIScrollView)Nein
Linke/Rechte AnsichtNeinIntegriert

NSAttributedString und Textformatierung

NSAttributedString ist eine grundlegende Fähigkeit von UITextView, die es von UITextField und UILabel unterscheidet. Ein attributierter String ermöglicht das Festlegen verschiedener Schriftarten, Farben, Zeilenabstände, Ausrichtungen und Links innerhalb eines Textes. Eigenschaften: textView.attributedText = attributedString. Wichtige NSAttributedString.Key-Attribute: font (.systemFont, .boldSystemFont, benutzerdefinierter UIFont), foregroundColor, backgroundColor, paragraphStyle (NSMutableParagraphStyle mit lineSpacing, alignment, lineBreakMode), link (URL für interaktive Links), underlineStyle, strikethroughStyle, shadow, baselineOffset, kern (Zeichenabstand). Zum Erstellen eines attributedString verwenden Sie init(string:, attributes:) oder NSMutableAttributedString zum Hinzufügen von Attributen zu verschiedenen Bereichen. UITextView zeigt Links (link-Attribut) automatisch als interaktiv an — beim Drücken wird die Delegatenmethode shouldInteractWithURL ausgelöst. Zum Zurücksetzen von Attributen für neue Eingaben verwenden Sie typingAttributes.

swift
import UIKit

let textView = UITextView()
textView.isEditable = false
textView.isScrollEnabled = true
textView.dataDetectorTypes = [.link, .phoneNumber]

let attributedString = NSMutableAttributedString(
    string: "Visit our website or call +1-800-555-0199"
)
attributedString.addAttributes([
    .font: UIFont.systemFont(ofSize: 16),
    .foregroundColor: UIColor.label,
], range: NSRange(location: 0, length: 11))

let linkRange = (attributedString.string as NSString)
    .range(of: "website")
attributedString.addAttributes([
    .link: URL(string: "https://example.com")!,
    .foregroundColor: UIColor.systemBlue,
], range: linkRange)

textView.attributedText = attributedString

UITextViewDelegate und Linkbehandlung

UITextViewDelegate ist ein Protokoll, das die Bearbeitung und Interaktion mit Text verwaltet. Hauptmethoden: textViewDidBeginEditing(textView) — wird bei Bearbeitungsbeginn aufgerufen; textViewDidEndEditing — bei Bearbeitungsende; textViewDidChange — bei jeder Textänderung; textViewDidChangeSelection — bei Auswahländerung; textViewShouldInteractWithURL — beim Antippen eines Links (gibt Bool zurück, erlaubt Übergang); textViewShouldInteractWithTextAttachment — beim Antippen eines eingebetteten Bildes. Zur Behandlung von Links innerhalb von UITextView überschreiben Sie shouldInteractWithURL — darin können Sie: URL in SFSafariViewController öffnen, UIAlertController zur Bestätigung anzeigen, benutzerdefinierte URL-Schemata behandeln. Wichtig: Wenn textView.isEditable = true, sind Links für einmaliges Antippen nicht verfügbar — Doppeltippen erforderlich. Für interaktive Links im bearbeitbaren textView verwenden Sie Gestenerkenner.

Linkbehandlung über SFSafariViewController

SFSafariViewController ist die Standardmethode zum Öffnen von Links in iOS-Anwendungen. In der Methode shouldInteractWithURL erstellen Sie SFSafariViewController mit der URL und präsentieren es modal oder über navigationController. Für universelle Links verwenden Sie UIApplication.shared.open(url, options) — dies verlässt jedoch die Anwendung. Um das Öffnen von Links zu verhindern, geben Sie in shouldInteractWithURL false zurück und behandeln die URL selbst.

Text Container System: Abstände und Exclusion Paths

NSTextContainer ist Teil der TextKit-Architektur und definiert den geometrischen Bereich, in dem UITextView-Text angezeigt wird. Jeder UITextView hat einen standardmäßigen textContainer, konfigurierbar über: textView.textContainerInset — Textabstände von den textView-Rändern (UIEdgeInsets); textView.textContainer.lineFragmentPadding — horizontaler Innenabstand innerhalb jeder Zeile; textView.textContainer.maximumNumberOfLines — Zeilenbegrenzung (0 = keine Begrenzung); textView.textContainer.exclusionPaths — Array von UIBezierPath für Bereiche, die der Text umfließen soll (Bilder, benutzerdefinierte Formen). ExclusionPaths ermöglichen komplexe Layouts: Text umfließt ein rundes Profilbild, ein Symbol oder eine beliebige Form. Für dynamische UITextView-Höhe beobachten Sie contentSize über KVO oder Delegaten und aktualisieren die Einschränkungen.

swift
// Dynamic UITextView height via contentSize
func textViewDidChange(textView: UITextView) {
    let fixedWidth = textView.frame.size.width
    let newSize = textView.sizeThatFits(
        CGSize(width: fixedWidth, height: CGFloat.greatestFiniteMagnitude)
    )
    heightConstraint.constant = newSize.height
    UIView.animate(withDuration: 0.1) {
        self.view.layoutIfNeeded()
    }
}

// ExclusionPath for image wrapping
let imageFrame = CGRect(x: 16, y: 100, width: 80, height: 80)
let exclusionPath = UIBezierPath(rect: imageFrame)
textView.textContainer.exclusionPaths = [exclusionPath]

Data Detector Types: Automatische Erkennung

dataDetectorTypes ist eine UITextView-Eigenschaft, die bestimmte Datentypen im Text automatisch erkennt und interaktiv macht: .link (URL, E-Mail), .phoneNumber (Telefonnummern), .address (Adressen), .calendarEvent (Daten und Ereignisse), .flightNumber (Flugnummern), .lookupSuggestion (Suchvorschläge), .trackingNumber (Sendungsnummern), .money (Beträge), .shipmentTrackingNumber, .all (alle Typen). Data Detector arbeitet mit NSDataDetector und URL und hebt erkannte Daten automatisch hervor. Zur Anpassung der Behandlung setzen Sie dataDetectorTypes und überschreiben shouldInteractWithURL im Delegaten. Wichtig: dataDetectorTypes funktioniert ohne zusätzliche Einrichtung nur für URL und phoneNumber — andere Typen erfordern möglicherweise iOS 16+. Data Detector kollidiert nicht mit dem link-Attribut in NSAttributedString — beide Mechanismen arbeiten parallel. Für Nur-Lese-UITextView mit Inhalt (Nachrichten, Artikel) setzen Sie dataDetectorTypes = [.link, .phoneNumber].

  • .link — URLs, E-Mail-Adressen; werden als blaue Links angezeigt
  • .phoneNumber — Telefonnummern; Antippen zeigt Anrufaktion
  • .address — Postadressen; Antippen öffnet Maps
  • .calendarEvent — Daten und Uhrzeiten; Antippen erstellt Kalenderereignis
  • .flightNumber — Flugnummern (iOS 16+); schnelle Flugüberprüfung

Codebeispiele mit UITextView

Betrachten wir zwei praktische Beispiele zur Verwendung von UITextView in iOS-Anwendungen. Das erste — eine Nur-Lese-Textansicht mit attributiertem Text und Datendetektor zur Anzeige von Inhalten. Das zweite — eine bearbeitbare Textansicht mit trägem Platzhalter und dynamischer Höhe für ein Kommentarformular. Beide Beispiele verwenden UIKit-Best Practices: Delegatenprotokoll, Auto Layout und TextKit.

Nur-Lese-UITextView mit Inhalt und Links

Der Nur-Lese-Modus wird durch Setzen von isEditable = false und isSelectable = true aktiviert. Dies ermöglicht dem Benutzer, Text auszuwählen und Links anzutippen, aber nicht zu bearbeiten. Setzen Sie dataDetectorTypes zur automatischen Linkerkennung, backgroundColor = .clear für transparenten Hintergrund. Für lange Inhalte verwenden Sie attributedText mit NSMutableParagraphStyle lineSpacing für Lesbarkeit. Fügen Sie link-Attribute für wichtige Links im Text hinzu.

swift
import UIKit

class ArticleViewController: UIViewController {
    let contentView = UITextView()

    override func viewDidLoad() {
        super.viewDidLoad()
        contentView.isEditable = false
        contentView.isSelectable = true
        contentView.dataDetectorTypes = [.link, .phoneNumber]
        contentView.backgroundColor = .clear
        contentView.textContainerInset = UIEdgeInsets(
            top: 8, left: 16,
            bottom: 8, right: 16
        )
        contentView.delegate = self
        loadArticleContent()
    }

    func loadArticleContent() {
        guard let url = URL(string: "https://example.com/article")
        else { return }
        // Load content from URL and set attributedText
    }
}

Bearbeitbarer UITextView mit Platzhalter

Der Platzhalter für UITextView ist nicht integriert — implementieren Sie ihn über ein UILabel über dem textView oder über attributedText mit isEmpty-Prüfung. Ein einfacher Ansatz: ein UILabel mit grauem Text, der bei Bearbeitungsbeginn ausgeblendet wird. In textViewDidChange prüfen Sie auf Textvorhandensein und blenden den Platzhalter ein/aus. Für eine elegantere Lösung verwenden Sie die Eigenschaft typingAttributes zum Festlegen der Eingabetextfarbe. Die dynamische textView-Höhe wird durch Beobachten von contentSize und Aktualisieren der Einschränkungen erreicht — dies ist ein Standardmuster für Chats und Kommentarformulare.

Häufig gestellte Fragen

Wie fügt man einen Platzhalter zu UITextView hinzu?

UITextView hat keinen integrierten Platzhalter. Die Standardlösung: Fügen Sie ein UILabel mit grauem Text über dem textView hinzu. In textViewDidBeginEditing blenden Sie das Label aus, in textViewDidEndEditing zeigen Sie es an, wenn der Text leer ist. Alternativ: Verwenden Sie attributedText mit grauer Farbe als Platzhalter und setzen Sie es bei Bearbeitungsbeginn zurück. Für eine fertige Lösung verwenden Sie die Bibliothek KMPlaceholderTextView oder ReactorKit.

Wie entfernt man Abstände in UITextView?

Setzen Sie textContainerInset = .zero und lineFragmentPadding = 0: textView.textContainerInset = UIEdgeInsets.zero; textView.textContainer.lineFragmentPadding = 0. Zusätzlich: textView.contentInset = .zero. Dies entfernt vollständig die Abstände von den textView-Rändern bis zum Text. Beachten Sie, dass lineFragmentPadding standardmäßig 5 beträgt.

Warum öffnet UITextView keine Links?

Überprüfen Sie: isSelectable = true (für Interaktion erforderlich), dataDetectorTypes enthält .link, der Delegat gibt in shouldInteractWithURL nicht false zurück. Wenn textView.isEditable = true, sind Links für ein einmaliges Antippen nicht verfügbar — Doppeltippen erforderlich. Für interaktive Links im bearbeitbaren textView fügen Sie UITapGestureRecognizer über dem textView hinzu und behandeln URLs manuell.

Wie erstellt man einen UITextView mit fester Höhe und Scrollen?

Setzen Sie isScrollEnabled = true und fügen Sie eine Höhenbeschränkung mit festem Wert hinzu. Text, der die Höhe überschreitet, wird gescrollt. Für optimale UX verwenden Sie maxHeight: Beobachten Sie contentSize und setzen Sie die Höhenbeschränkung nicht höher als maxHeight. Bei Überschreitung von maxHeight aktivieren Sie scrollEnabled. Dies ist ein Standardmuster für Nachrichten- und Kommentareingabefelder.

Wie fügt man ein Bild in UITextView ein?

Verwenden Sie NSTextAttachment: Erstellen Sie ein Objekt, setzen Sie Bild und bounds, erstellen Sie dann einen NSAttributedString aus dem Anhang und fügen Sie ihn in textView.attributedText ein. Beispiel: let attachment = NSTextAttachment(); attachment.image = image; attachment.bounds = CGRect(x, y, width, height); let attributedString = NSAttributedString(attachment: attachment). Das Bild wird inline im Text angezeigt und mit ihm gescrollt.

Zusammenfassung

  • UITextView — mehrzeilige Textkomponente in UIKit, Erbe von UIScrollView mit TextKit-Unterstützung
  • NSAttributedString — Schlüsselfunktion zum Formatieren von Schriftarten, Farben, Links und Absätzen
  • UITextViewDelegate — Bearbeitungsverwaltung und Behandlung von Link- und Anhang-Tipps
  • Data Detector Types — automatische Erkennung von URLs, Telefonen, Adressen und Daten via NSDataDetector
  • Text Container — System mit exclusionPaths, lineFragmentPadding und textContainerInset für Layout
  • Platzhalter — nicht integriert, implementiert über UILabel oder attributedText mit grauer Farbe
  • Dynamische Höhe — contentSize-Beobachtung und Einschränkungsaktualisierung für automatische Höhe
  • UITextView unterscheidet sich von UITextField durch Unterstützung von Mehrzeiligkeit, Attributen, Scrollen und Datenerkennung

Wir entwickeln eine mobile Applikation schlüsselfertig

IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.

Projekt besprechen

Lesen Sie auch