UITextView实现占位文字

来源:互联网 发布:视频教学软件 编辑:程序博客网 时间:2024/05/22 08:05

UITextField *textField默认的情况
1.只能显示一行文字
2.有占位文字

UITextView *textView默认的情况
2.能显示任意行文字
2.没有占位文字

文本输入控件,最终希望拥有的功能
1.能显示任意行文字
2.有占位文字

最终的方案:
1.继承自UITextView
2.在UITextView能显示任意行文字的基础上,增加”有占位文字”的功能

二、首先新建一个ZJPlaceholderTextView,.h文件如下

#import <UIKit/UIKit.h>@interface ZJPlaceholderTextView : UITextView/** 占位文字 */@property (nonatomic, copy) NSString *placeholder;/** 占位文字的颜色 */@property (nonatomic, strong) UIColor *placeholderColor;

第二步、.m文件如下:

#import "ZJPlaceholderTextView.h"@interface ZJPlaceholderTextView()/** 占位文字label */@property (nonatomic, weak) UILabel *placeholderLabel;@end@implementation ZJPlaceholderTextView- (UILabel *)placeholderLabel{    if (!_placeholderLabel) {        // 添加一个用来显示占位文字的label        UILabel *placeholderLabel = [[UILabel alloc] init];        placeholderLabel.numberOfLines = 0;        placeholderLabel.x = 4;        placeholderLabel.y = 7;        [self addSubview:placeholderLabel];        _placeholderLabel = placeholderLabel;    }    return _placeholderLabel;}- (instancetype)initWithFrame:(CGRect)frame{    if (self = [super initWithFrame:frame]) {        // 垂直方向上永远有弹簧效果        self.alwaysBounceVertical = YES;        // 默认字体        self.font = [UIFont systemFontOfSize:15];        // 默认的占位文字颜色        self.placeholderColor = [UIColor grayColor];        // 监听文字改变        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textDidChange) name:UITextViewTextDidChangeNotification object:nil];    }    return self;}- (void)dealloc{    [[NSNotificationCenter defaultCenter] removeObserver:self];}/** * 监听文字改变 */- (void)textDidChange{    // 只要有文字, 就隐藏占位文字label    self.placeholderLabel.hidden = self.hasText;}/** * 更新占位文字的尺寸 */- (void)layoutSubviews{    [super layoutSubviews];    self.placeholderLabel.width = self.width - 2 * self.placeholderLabel.x;    [self.placeholderLabel sizeToFit];}#pragma mark - 重写setter- (void)setPlaceholderColor:(UIColor *)placeholderColor{    _placeholderColor = placeholderColor;    self.placeholderLabel.textColor = placeholderColor;}- (void)setPlaceholder:(NSString *)placeholder{    _placeholder = [placeholder copy];    self.placeholderLabel.text = placeholder;    [self setNeedsLayout];}- (void)setFont:(UIFont *)font{    [super setFont:font];    self.placeholderLabel.font = font;    [self setNeedsLayout];}- (void)setText:(NSString *)text{    [super setText:text];    [self textDidChange];}- (void)setAttributedText:(NSAttributedString *)attributedText{    [super setAttributedText:attributedText];    [self textDidChange];}/** * setNeedsDisplay方法 : 会在恰当的时刻自动调用drawRect:方法 * setNeedsLayout方法 : 会在恰当的时刻调用layoutSubviews方法 */@end
0 0
原创粉丝点击