zoukankan      html  css  js  c++  java
  • 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];
  • 相关阅读:
    Android基础之项目结构分析
    串口调试,提示the given port name does not start with COM/com异常解决办法,,发现是打印机在搞怪
    C# 通过URL获取图片并显示在PictureBox上的方法
    学习资料集合
    C#语音朗读文本 — TTS的实现
    SQL SERVER 2008安装错误(is not a valid login or you do have permission)
    函数调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。
    SerialPort使用
    Javascript函数的几种写法
    JS验证图片格式和大小并预览
  • 原文地址:https://www.cnblogs.com/dianming/p/6732577.html
Copyright © 2011-2022 走看看