为UITextView添加placeholder

在实际项目开发中经常有需要在UITextView中添加提示用户输入的一些文字,类似UITextField的Placeholder属性。

现在习惯了可视化编程,所以把自定义的视图定义为可视化模式

直接上代码

@IBDesignable 
class FrankTextView: UITextView {

    @IBInspectable
    var placeholder: String? //可在 Interface Builder面板中自定义文字
    @IBInspectable
    var placeholderColor: UIColor = .clear //可在Interface Builder面板中自定义颜色
    
    override func draw(_ rect: CGRect) {
        let innerRect = CGRect(x: 5, y: 8, width:rect.width-10 , height:rect.height-16)
        if let placeholder = placeholder as NSString? {
            if let text = self.text {
                if text.characters.count <= 0 {
                    placeholder.draw(in: innerRect, withAttributes: [.font:self.font ?? UIFont.systemFont(ofSize: 13), .foregroundColor:self.placeholderColor])
                }
            } else {
                placeholder.draw(in: innerRect, withAttributes: [.font:self.font ?? UIFont.systemFont(ofSize: 13), .foregroundColor:self.placeholderColor])
            }
        }
    }
    
    override func awakeFromNib() {
        super.awakeFromNib()
        self.setNeedsDisplay()
        NotificationCenter.default.addObserver(self, selector: #selector(updatePlaceholder(_:)), name: .UITextViewTextDidChange, object: nil)
    }
    
    @objc private func updatePlaceholder(_ sender: Notification) {
        self.setNeedsDisplay()
    }
    
    deinit {
        NotificationCenter.default.removeObserver(self, name: .UITextViewTextDidChange, object: nil)
    }
}
2、通过 IBInspectable 和 IBDesignable标签我们可以把自定义的视图和属性显示在Interface Builder面板中,方便我们可视化编辑。

以上自定义视图效果如下:

image.png

这样是不是很方便,想了解IBInspectable 、IBDesignable标签的强大之处,请自行百度。

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

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,192评论 4 61
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,841评论 18 139
  • 难得的周末,一觉睡到小时候。 醒后临近傍晚下楼买菜,路过小区活动池,在一群平均身高不超过一米五的人群中,厚...
    半夏老鱼汤阅读 192评论 0 0
  • 共读:《不要生气,好好地说》和《在哪里》《我是生活小能手》,读完生活小能手,小家伙从床上跑下去,拿起她的扫帚要帮我...
    小窗幽记_hj阅读 159评论 0 0
  • ①汇报工作说结果 不要告诉老板工作过程多艰辛,你多么不容易。举重若轻的人老板最喜欢,一定要把结果给老板,结果思维是...
    点滴产品阅读 499评论 0 1