411 Stimmen

Füge Platzhaltertext in UITextView in Swift ein?

Wie kann ich einen Platzhalter in einem UITextView hinzufügen, ähnlich wie bei UITextField, in Swift?

2voto

Mostafa ElShazly Punkte 338

Swift 5.2

Standalone-Klasse

Verwenden Sie dies, wenn Sie eine Klasse möchten, die überall verwendet werden kann, da sie eigenständig ist

import UIKit
class PlaceHolderTextView:UITextView, UITextViewDelegate{
var placeholderText = "Platzhaltertext"

override func willMove(toSuperview newSuperview: UIView?) {
    textColor = .lightText
    delegate = self
}

func textViewDidBeginEditing(_ textView: UITextView) {
    if textView.text == placeholderText{
        placeholderText = textView.text
        textView.text = ""
        textView.textColor = .darkText
    }
}

func textViewDidEndEditing(_ textView: UITextView) {
    if textView.text == ""{
        textView.text = placeholderText
        textColor = .lightText
    }
}    
}

Der Schlüssel hier ist die Funktion willMove(toSuperView:), da sie es ermöglicht, die Ansicht einzurichten, bevor sie zur Hierarchie einer anderen Ansicht hinzugefügt wird (ähnlich wie viewDidLoad/viewWillAppear in ViewControllern)

2voto

Vaibhav Saran Punkte 12748

Swift 3.1

Diese Erweiterung hat bei mir gut funktioniert: https://github.com/devxoul/UITextView-Placeholder

Hier ist ein Code-Schnipsel:

Installieren Sie es über pod:

pod 'UITextView+Placeholder', '~> 1.2'

Importieren Sie es in Ihre Klasse

import UITextView_Placeholder

Und fügen Sie die placeholder-Eigenschaft zu Ihrem bereits erstellten UITextView hinzu

textView.placeholder = "Geben Sie einige Details ein"

Das war's... So sieht es aus (Der dritte Kasten ist ein UITextView) Bildbeschreibung hier eingeben

2voto

Di_Nerd Punkte 700

SWIFTUI

Hier ist ein Swiftui TextView, der mit UIViewRepresentable erstellt wurde und über Funktionalität und Rahmenfarben verfügt

struct TextView: UIViewRepresentable {

@Binding var text: String
var placeholderText: String
var textStyle: UIFont.TextStyle

func makeUIView(context: Context) -> UITextView {
    let textView = UITextView()

    textView.font = UIFont.preferredFont(forTextStyle: textStyle)
    textView.autocapitalizationType = .sentences
    textView.isSelectable = true
    textView.isUserInteractionEnabled = true
    textView.delegate = context.coordinator
    textView.layer.borderWidth = 0.6
    textView.layer.borderColor = UIColor.lightGray.cgColor
    textView.layer.cornerRadius = 10
    textView.text = placeholderText
    textView.textColor = UIColor.lightGray
    return textView
}

func updateUIView(_ uiView: UITextView, context: Context) {
    uiView.text = text
    uiView.font = UIFont.preferredFont(forTextStyle: textStyle)
}

func makeCoordinator() -> Coordinator {
    Coordinator(self)
}

class Coordinator: NSObject, UITextViewDelegate {
    var parent: TextView

    init(_ parent: TextView) {
        self.parent = parent
    }

    func textViewDidChange(_ textView: UITextView) {
        self.parent.text = textView.text
    }

    func textViewDidBeginEditing(_ textView: UITextView) {
        if textView.textColor == UIColor.lightGray {
            textView.text = nil
            textView.textColor = UIColor.black
        }
    }

    func textViewDidEndEditing(_ textView: UITextView) {
        if textView.text.isEmpty {
            textView.text = self.parent.placeholderText
            textView.textColor = UIColor.lightGray
        }
    }
}

}

dann in Ihrer Ansicht können Sie es so verwenden

TextView(text: self.$viewModel.addPostCommentText, placeholderText: "Teilen Sie Ihre Geschichte über dieses Bargeld mit", textStyle: .body)
                .padding()
                .frame(height: 150)

2voto

Siddhesh Bhide Punkte 374

Keine Notwendigkeit, eine Drittbibliothek hinzuzufügen. Verwenden Sie einfach den folgenden Code...

class SubmitReviewVC : UIViewController, UITextViewDelegate {

@IBOutlet var txtMessage : UITextView!
var lblPlaceHolder : UILabel!

override func viewDidLoad() {
    super.viewDidLoad()

    txtMessage.delegate = self
    lblPlaceHolder = UILabel()
    lblPlaceHolder.text = "Nachricht eingeben..."
    lblPlaceHolder.font = UIFont.systemFont(ofSize: txtMessage.font!.pointSize)
    lblPlaceHolder.sizeToFit()
    txtMessage.addSubview(lblPlaceHolder)
    lblPlaceHolder.frame.origin = CGPoint(x: 5, y: (txtMessage.font?.pointSize)! / 2)
    lblPlaceHolder.textColor = UIColor.lightGray
    lblPlaceHolder.isHidden = !txtMessage.text.isEmpty
}

func textViewDidChange(_ textView: UITextView) {
    lblPlaceHolder.isHidden = !textView.text.isEmpty
}

}

2voto

nabil muthanna Punkte 61

Swift - Ich habe eine Klasse geschrieben, die UITextView erbt, und ich habe ein UILabel als Subview hinzugefügt, um als Placeholder zu fungieren.

  import UIKit
  @IBDesignable
  class HintedTextView: UITextView {

      @IBInspectable var hintText: String = "hintText" {
          didSet{
              hintLabel.text = hintText
          }
      }

      private lazy var hintLabel: UILabel = {
          let label = UILabel()
          label.font = UIFont.systemFontOfSize(16)
          label.textColor = UIColor.lightGrayColor()
          label.translatesAutoresizingMaskIntoConstraints = false
          return label
      }()

      override init(frame: CGRect, textContainer: NSTextContainer?) {
          super.init(frame: frame, textContainer: textContainer)
          setupView()
      }

      required init?(coder aDecoder: NSCoder) {
         super.init(coder: aDecoder)
         setupView()
      }

      override func prepareForInterfaceBuilder() {
         super.prepareForInterfaceBuilder()
         setupView()
      }

      private func setupView() {

        translatesAutoresizingMaskIntoConstraints = false
        delegate = self
        font = UIFont.systemFontOfSize(16)

        addSubview(hintLabel)

        NSLayoutConstraint.activateConstraints([

           hintLabel.leftAnchor.constraintEqualToAnchor(leftAnchor, constant: 4),
           hintLabel.rightAnchor.constraintEqualToAnchor(rightAnchor, constant: 8),
           hintLabel.topAnchor.constraintEqualToAnchor(topAnchor, constant: 4),
           hintLabel.heightAnchor.constraintEqualToConstant(30)
         ])
        }

      override func layoutSubviews() {
        super.layoutSubviews()
        setupView()
     }

}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X