美文网首页
【iOS开发】自定义UITextView

【iOS开发】自定义UITextView

作者: 文刂Rn | 来源:发表于2017-02-19 11:32 被阅读58次

    UITextView添加占位文字和占位文字颜色

    具体实现

    .h文件
    
    #import <UIKit/UIKit.h>
    
    @interface FMTextViewPlaceholder : UITextView
    
    /** 占位文字 */
    @property (nonatomic, strong) NSString *placeholderWord;
    
    /** 占位文字颜色 */
    @property (nonatomic, weak) UIColor *placeholderColor;
    
    @end
    
    .m文件
    #import "FMTextViewPlaceholder.h"
    
    @implementation FMTextViewPlaceholder
    
    - (void)awakeFromNib {
        [super awakeFromNib];
        
        self.font = [UIFont systemFontOfSize:15];
        
        // 监听文字的改变
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textDidChange:) name:UITextViewTextDidChangeNotification object:self];
    }
    
    - (instancetype)initWithFrame:(CGRect)frame {
        if (self = [super initWithFrame:frame]) {
            
            self.font = [UIFont systemFontOfSize:15];
            
            // 监听文字的改变
            [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textDidChange:) name:UITextViewTextDidChangeNotification object:self];
            
        }
        return self;
    }
    
    - (void)textDidChange:(NSNotification *)note {
        
        // 会重新调用drawRect:方法
        [self setNeedsDisplay];
    }
    
    #pragma mark - setter方法
    - (void)setPlaceholderWord:(NSString *)placeholderWord {
        _placeholderWord = placeholderWord;
        
        // 重绘
        [self setNeedsDisplay];
    }
    
    
    - (void)setPlaceholderColor:(UIColor *)placeholderColor {
        _placeholderColor = placeholderColor;
        
        [self setNeedsDisplay];
    }
    
    
    - (void)setText:(NSString *)text {
        [super setText:text];
        
        [self setNeedsDisplay];
    }
    
    - (void)setFont:(UIFont *)font {
        [super setFont:font];
        
        [self setNeedsDisplay];
    }
    
    - (void)setAttributedText:(NSAttributedString *)attributedText {
        [super setAttributedText:attributedText];
        
        [self setNeedsDisplay];
    }
    
    #pragma mark - 系统方法
    
    - (void)dealloc {
        [[NSNotificationCenter defaultCenter] removeObserver:self];
    }
    
    - (void)layoutSubviews {
        [super layoutSubviews];
        
        [self setNeedsDisplay];
    }
    
    /**
     *  每次调用这个方法就会把上一次绘制清空
     *
     */
    - (void)drawRect:(CGRect)rect {
        if (self.hasText) return;
        
        // 属性
        NSMutableDictionary *attrs = [NSMutableDictionary dictionary];
        
        attrs[NSFontAttributeName] = self.font;
        
        attrs[NSForegroundColorAttributeName] = self.placeholderColor;
        
        // 绘文字
        rect.origin.x = 5,
        rect.origin.y = 8;
        rect.size.width -= rect.origin.x * 2;
        
        [self.placeholderWord drawInRect:rect withAttributes:attrs];
    }
    
    @end
    
    

    相关文章

      网友评论

          本文标题:【iOS开发】自定义UITextView

          本文链接:https://www.haomeiwen.com/subject/gxqjwttx.html