Swift UITextView placeholder

网上有多种给UITextview添加占位字符的方案, 我最喜欢这一种:

感谢@疯狂超人_


20240201165848.jpg

针对这一问题, 已做如下修改, 请使用第二种改进方案

1. 原方案

import UIKit
extension UITextView {
    
    var placeholder: String {
        set {
            let lb = UILabel()
            lb.font = font
            lb.numberOfLines = 0
            lb.textColor = .lightGray
            lb.text = newValue
            addSubview(lb)
            setValue(lb, forKey: "_placeholderLabel")
        }
        get {
            let lb = value(forKey: "_placeholderLabel") as? UILabel
            return lb?.text ?? ""
        }
    }
}

2. 改进方案

import UIKit

extension UITextView {
    
    private static let kPlaceholderTag = 20240202
    
    var placeholder: String {
        set {
            if let lb = viewWithTag(UITextView.kPlaceholderTag) as? UILabel {
                lb.text = newValue
            } else {
                let lb = UILabel()
                lb.tag = UITextView.kPlaceholderTag
                lb.font = font
                lb.numberOfLines = 0
                lb.textColor = .lightGray
                lb.text = newValue
                addSubview(lb)
                setValue(lb, forKey: "_placeholderLabel")
            }
        }
        get {
            let lb = value(forKey: "_placeholderLabel") as? UILabel
            return lb?.text ?? ""
        }
    }
}

示例:

let textView = UITextView()
textView.placeholder = "请给个小心心"
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容