         _placeholderTextView?.frame = frame
     }
     
-    override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
+    override public func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
         
         
         if keyPath == kAttributedPlaceholderKey {

        }
        
    }

    override func becomeFirstResponder() -> Bool {
        
        setPlaceHolderVisibleForText(text: text)
        return super.becomeFirstResponder()

        
    }
    
    private var _placeholderTextView: UITextView?
    
    private let kAttributedPlaceholderKey = "attributedPlaceholder";
    private let kPlaceholderKey = "placeholder";
    private let kFontKey = "font";
    private let kAttributedTextKey = "attributedText";
    private let kTextKey = "text";
    private let kExclusionPathsKey = "exclusionPaths";
    private let kLineFragmentPaddingKey = "lineFragmentPadding";
    private let kTextContainerInsetKey = "textContainerInset";
    private let kTextAlignmentKey = "textAlignment";
    
    
    
    required public init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        preparePlaceholder()
    }
    override public init(frame: CGRect, textContainer: NSTextContainer?) {
        super.init(frame: frame, textContainer: textContainer)
        preparePlaceholder()
    }
    
    private func preparePlaceholder() {
        
        assert(_placeholderTextView == nil, "placeholder has been prepared already: \(_placeholderTextView)")
        
