自定义textView

这是一个简单的自定义textView,占位文字,字数限制

import UIKit

@objc protocol ADLimitTextDelegate {
    
    @objc optional func textView(_ textView: ADLimitTextView, num: Int)
}

class ADLimitTextView: UIView {

//
    var limitNums: Int = 100 /// 限制的字符
    var limitDelegate: ADLimitTextDelegate?
    
    
    var textFont: UIFont = .systemFont(ofSize: 16)
    
    //限制次数
    let numerRemindLabel: UILabel = {
        let label = UILabel()
        label.text = "0/50"
        label.font = .systemFont(ofSize: 12)
        label.textColor = UIColor(r: 195, g: 197, b: 202)
        return label
    }()
    
    //文本框
    let textView: UITextView = {
        let textView = UITextView()
        textView.font = .systemFont(ofSize: 16)
        textView.backgroundColor = UIColor(r: 248, g: 248, b: 249)
        textView.layer.cornerRadius = 2.5
        textView.layer.masksToBounds = true
        return textView
    }()
    
    //提示
    let placeHolderLabel: UILabel = {
        let label = UILabel()
        label.textColor = UIColor(r: 195, g: 197, b: 202)
        label.font = .systemFont(ofSize: 14)
        label.numberOfLines = 0
        return label
    }()
    
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        
        self.addSubview(self.textView)
        self.addSubview(self.placeHolderLabel)
        self.addSubview(self.numerRemindLabel)
        
        self.textView.delegate = self
        
        self.textView.snp.makeConstraints { (make) in
            make.edges.equalToSuperview()
        }
        
        self.placeHolderLabel.snp.makeConstraints { (make) in
            make.left.equalToSuperview().offset(8)
            make.right.equalToSuperview().offset(-10)
            make.top.equalToSuperview().offset(12)
        }
        
        self.numerRemindLabel.snp.makeConstraints { (make) in
            make.right.equalToSuperview().offset(-10)
            make.bottom.equalToSuperview().offset(-5)
        }
    }
    
    convenience init(limitNum: Int = 50, placeHolder: String = "请输入") {
        self.init(frame: .zero)

        limitNums = limitNum
        placeHolderLabel.text = placeHolder
        numerRemindLabel.text = "0/\(limitNum)"
        
    }
    
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    
    
}

extension ADLimitTextView: UITextViewDelegate{
    
    func textViewDidChange(_ textView: UITextView) {
        
        if textView.text.count > 0 {
            self.placeHolderLabel.isHidden = true
        } else {
            self.placeHolderLabel.isHidden = false
        }
        
        if textView.text.count > self.limitNums {
            if let str = textView.text {
                //截取前面的字符
                let subStr = str.prefix(self.limitNums)
                textView.text = String(subStr)
            }
        }
        
        self.numerRemindLabel.text = "\(textView.text.count)/\(self.limitNums)字"
        
        if self.limitDelegate != nil {
            self.limitDelegate!.textView?(self, num: self.limitNums)
        }
    }
    
    
}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容