本文主要是介绍UITextView实现占位文字,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
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) {// 添加一个用来显示占位文字的labelUILabel *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
{// 只要有文字, 就隐藏占位文字labelself.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
这篇关于UITextView实现占位文字的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!