美文网首页
Swift-通过Runtime为UITextView添加占位文字

Swift-通过Runtime为UITextView添加占位文字

作者: SK丿希望 | 来源:发表于2019-07-29 10:21 被阅读0次

    OC版在这

    • 纯代码使用
    self.tv.placeholder = "我是占位文字"
    self.tv.placeholderColor = UIColor.yellow
    
    • Xib使用


      image.png
    import Foundation
    import UIKit
    
    extension UITextView {
        
        private struct RuntimeKey {
            static let hw_placeholderLabelKey = UnsafeRawPointer.init(bitPattern: "hw_placeholderLabelKey".hashValue)
            /// ...其他Key声明
        }
        /// 占位文字
        @IBInspectable public var placeholder: String {
            get {
                return self.placeholderLabel.text ?? ""
            }
            set {
                self.placeholderLabel.text = newValue
            }
        }
        
        /// 占位文字颜色
        @IBInspectable public var placeholderColor: UIColor {
            get {
                return self.placeholderLabel.textColor
            }
            set {
                self.placeholderLabel.textColor = newValue
            }
        }
        
        private var placeholderLabel: UILabel {
            get {
                var label = objc_getAssociatedObject(self, UITextView.RuntimeKey.hw_placeholderLabelKey!) as? UILabel
                if label == nil { // 不存在是 创建 绑定
                    if (self.font == nil) { // 防止没大小时显示异常 系统默认设置14
                        self.font = UIFont.systemFont(ofSize: 14)
                    }
                    label = UILabel.init(frame: self.bounds)
                    label?.numberOfLines = 0
                    label?.font = self.font
                    label?.textColor = UIColor.lightGray
                    self.addSubview(label!)
                    self.setValue(label!, forKey: "_placeholderLabel")
                    objc_setAssociatedObject(self, UITextView.RuntimeKey.hw_placeholderLabelKey!, label!, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
                    self.sendSubviewToBack(label!)
                }
                return label!
            }
            set {
                objc_setAssociatedObject(self, UITextView.RuntimeKey.hw_placeholderLabelKey!, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
            }
        }
    }
    

    相关文章

      网友评论

          本文标题:Swift-通过Runtime为UITextView添加占位文字

          本文链接:https://www.haomeiwen.com/subject/rluvrctx.html