[Swift]iOS 开发:给 UITextView 添加占位符的方法

本文参考了史上最全的iOS之UITextView实现placeHolder占位文字的N种方法,从中选出了我认为最省事的一种方法,尽量最简化,代码如下:

class CustomTextView: UITextView {
    private var _placeholder:String!

    init(frame:CGRect,placeholder:String) {
        super.init(frame: frame, textContainer: nil)
        _placeholder = placeholder
        NotificationCenter.default.addObserver(self, selector: #selector(textDidChange), name: .UITextViewTextDidChange, object: self)//观察是否有文字输入
    }

//无论我们想要绘制什么图形,首要任务就是先获取上下文,你可以把上下文理解成一块画布,有了画布才能画东西;iOS 有三种获取上下文的方式:重写 UIView 的drawRect 和 drawRect inContext 方法会自动生成一个上下文,我们直接在这两个方法里绘制内容,UIView 就能自动渲染出来了,还有一种方法是使用UIGraphicsBeginImageContextWithOptions方法自己创建一个 UIImage 类型的上下文,然后使用let ctx = UIGraphicsGetCurrentContext() 获取就行了
    override func draw(_ rect: CGRect) {
        if hasText{
            return//如果输入框内有文字,直接返回
        }
        _placeholder.draw(in: CGRect(x:5,y:7,width:rect.width-10,height:rect.height), withAttributes: [NSForegroundColorAttributeName:UIColor.yellow,NSFontAttributeName:UIFont.systemFont(ofSize: 14)])//占位符的位置坐标,字体大小以及绘制区域大小,如果你对占位符的大小和位置不满意,请在这修改
    }

    func textDidChange(){
        setNeedsDisplay()//调用drawRect方法,切勿手动调用drawRect方法
    }

    deinit {
        NotificationCenter.default.removeObserver(self)
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}
///////////////////////

    override func viewDidLoad() {
        super.viewDidLoad()
        let textView = CustomTextView(frame: CGRect(x: 100, y: 100, width: 100, height: 100),placeholder:"我是占位符")
        textView.backgroundColor = UIColor.brown
        view.addSubview(textView)
    }

是不是狠简单

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值