So fügen Sie einen Platzhalter in UITextView unter Swift hinzu: Vollständige Anleitung

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Warum UITextView keinen integrierten Platzhalter hat und wie man das umgeht

\n\n

Jeder iOS-Entwickler, der schon einmal mit UITextView gearbeitet hat, ist auf dasselbe Problem gestoßen: Im Gegensatz zu UITextField hat UITextView keine eingebaute placeholder-Eigenschaft. Sie erstellen ein mehrzeiliges Texteingabefeld, starten die App – und sehen ein leeres weißes Rechteck. Der Benutzer versteht nicht, was er eingeben soll, und der Designer ist frustriert.

\n\n

Warum hat Apple diese Eigenschaft nicht hinzugefügt? Historisch wurde UITextView als Element zum Anzeigen und Bearbeiten großer Textmengen (z. B. Notizen oder E-Mails) positioniert, nicht als Eingabefeld mit Hinweis. Aber die Zeiten haben sich geändert: Heute verwenden wir UITextView für Kommentare, Beschreibungen, Biografien – überall dort, wo ein Platzhalter benötigt wird.

\n\n

In diesem Artikel behandeln wir 3 bewährte Methoden, um Platzhaltertext in UITextView unter Swift hinzuzufügen. Sie erfahren, wie Sie dies über UILabel, über Attribute von NSAttributedString und durch die Erstellung einer eigenen Unterklasse tun. Los geht's!

\n\n

Methode 1: Klassisches UILabel über UITextView

\n\n

Der einfachste und verständlichste Weg – platzieren Sie ein UILabel über dem UITextView und steuern Sie dessen Sichtbarkeit. Diese Methode ist ideal für Anfänger und für Projekte, die keine komplexe Anpassung erfordern.

\n\n

Wie es funktioniert

\n\n

Sie fügen ein UILabel als untergeordnetes Element von UITextView hinzu, weisen ihm den Platzhaltertext zu und blenden es aus, wenn der Benutzer mit der Eingabe beginnt. Hier ist ein Schritt-für-Schritt-Beispiel:

\n\n
import UIKit\n\nclass ViewController: UIViewController, UITextViewDelegate {\n    \n    @IBOutlet weak var textView: UITextView!\n    let placeholderLabel = UILabel()\n    \n    override func viewDidLoad() {\n        super.viewDidLoad()\n        textView.delegate = self\n        setupPlaceholder()\n    }\n    \n    func setupPlaceholder() {\n        placeholderLabel.text = "Geben Sie Ihren Kommentar ein..."\n        placeholderLabel.font = UIFont.systemFont(ofSize: 16)\n        placeholderLabel.textColor = UIColor.lightGray\n        placeholderLabel.translatesAutoresizingMaskIntoConstraints = false\n        textView.addSubview(placeholderLabel)\n        \n        NSLayoutConstraint.activate([\n            placeholderLabel.topAnchor.constraint(equalTo: textView.topAnchor, constant: 8),\n            placeholderLabel.leadingAnchor.constraint(equalTo: textView.leadingAnchor, constant: 5),\n            placeholderLabel.trailingAnchor.constraint(equalTo: textView.trailingAnchor, constant: -5)\n        ])\n    }\n    \n    func textViewDidChange(_ textView: UITextView) {\n        placeholderLabel.isHidden = !textView.text.isEmpty\n    }\n}
\n\n

Wichtig: Vergessen Sie nicht, den Delegaten UITextViewDelegate zu setzen und die Methode textViewDidChange zu implementieren. Wenn Sie SwiftUI verwenden, ist der Ansatz anders – dort wird der Modifikator .overlay verwendet.

\n\n

Vor- und Nachteile

\n
    \n
  • Vorteile: Einfachheit, leicht verständlich, funktioniert auf jeder iOS-Version.
  • \n
  • Nachteile: Sie müssen die Constraints im Auge behalten, wenn sich die Insets des Textviews ändern. Funktioniert auch nicht, wenn das Textview NSAttributedString mit unterschiedlichen Ausrichtungen hat.
  • \n
\n\n

Methode 2: Platzhalter über NSAttributedString

\n\n

Eine elegantere Methode – verwenden Sie String-Attribute. Die Idee ist, dass Sie den Platzhalter als attribuierten Text in grauer Farbe anzeigen und ihn durch normalen Text ersetzen, sobald der Benutzer mit der Eingabe beginnt.

\n\n

Diese Methode ist besonders nützlich, wenn Sie mit UITextView in Swift arbeiten und sich nicht mit zusätzlichen Views herumschlagen möchten.

\n\n

Implementierung

\n\n
import UIKit\n\nclass ViewController: UIViewController, UITextViewDelega                

Blogs

Buchempfehlungen