• UITextView设置占位文字


    这里只介绍一种,这种方便扩展,可以占位文字颜色.

    我们继承一个UITextView:

    #import <UIKit/UIKit.h>
    
    @interface MyTextView : UITextView
    
    /** 占位文字 */
    @property (nonatomic, copy) NSString *placeholder;
    /** 占位文字颜色 */
    @property (nonatomic, strong) UIColor *placeholderColor;
    
    @end
    #import "MyTextView.h"
    
    @implementation MyTextView
    
    
    - (instancetype)initWithFrame:(CGRect)frame
    {
        if (self = [super initWithFrame:frame]) {
            // 设置默认字体
            self.font = [UIFont systemFontOfSize:15];
            
            // 设置默认颜色
            self.placeholderColor = [UIColor grayColor];
            
            // 使用通知监听文字改变
            [[NSNotificationCenter defaultCenter] addObserver:self    selector:@selector(textDidChange:) name:UITextViewTextDidChangeNotification object:self];
        }
        return self;
    }
    
    - (void)textDidChange:(NSNotification *)note
    {
        // 会重新调用drawRect:方法
        [self setNeedsDisplay];
    }
    
    - (void)dealloc
    {
        [[NSNotificationCenter defaultCenter] removeObserver:self];
    }
    
    /**
     * 每次调用drawRect:方法,都会将以前画的东西清除掉
     */
    - (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 -= 2 * rect.origin.x;
        [self.placeholder drawInRect:rect withAttributes:attrs];
    }
    
    - (void)layoutSubviews
    {
        [super layoutSubviews];
        
        [self setNeedsDisplay];
    }
    
    #pragma mark - setter
    - (void)setPlaceholder:(NSString *)placeholder
    {
        _placeholder = [placeholder copy];
        
        [self setNeedsDisplay];
    }
    
    - (void)setPlaceholderColor:(UIColor *)placeholderColor
    {
        _placeholderColor = placeholderColor;
        
        [self setNeedsDisplay];
    }
    
    - (void)setFont:(UIFont *)font
    {
        [super setFont:font];
        
        [self setNeedsDisplay];
    }
    
    - (void)setText:(NSString *)text
    {
        [super setText:text];
        
        [self setNeedsDisplay];
    }
    
    - (void)setAttributedText:(NSAttributedString *)attributedText
    {
        [super setAttributedText:attributedText];
        
        [self setNeedsDisplay];
    }

    调用:

        MyTextView *my = [[MyTextView alloc] initWithFrame:CGRectMake(10, 44, [UIScreen mainScreen].bounds.size.width-20, 200)];
        my.placeholder = @"请输入文字";
        //不设置颜色,默认是灰色.
        my.placeholderColor = [UIColor orangeColor];
        //添加边框
        my.layer.borderColor = [UIColor grayColor].CGColor;
        
        my.layer.borderWidth =1.0;
        
        my.layer.cornerRadius =5.0;
        
        [self.view addSubview:my];
  • 相关阅读:
    Ajax在表单中的应用
    jQuery实例
    Ajax之404,200等查询
    Ajax知识总结
    Ajax之eval()函数
    闭包应用
    全局预处理与执行,作用域与作用域链
    替换富文本里的px为rem
    vue2 兼容ie8
    vue-awesome-swiper 水平滚动异常
  • 原文地址:https://www.cnblogs.com/dianming/p/6732577.html
Copyright © 2020-2023  润新知