iOS 개발: UITExtView에 자리 표시자를 추가하는 방법

1490 단어
본고는 역사상 가장 완전한 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)//         
    }
    
    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)
    }

11.gif
너무 쉽죠?

좋은 웹페이지 즐겨찾기