[IOS]——UITextView实现placeholder占位
2020-07-29 本文已影响0人
Fat_Blog
首先说明一下TextView和TextField的区别
IOS中的UITextView和UITextField都是文本输入控件并都能够调用系统键盘。
两者最大的区别是:
1、UITextView支持多行输入并且可以滚动显示浏览全文,而UITextField只能单行输入。
2、UITextView继承自UIScrollView,UITextField继承自UIView[UIControl]。
3、UITextview没有placeholder属性 UItextField有placeholder属性
在使用上我们完全可以把UITextView看作是UITextField的加强版。
那么如果我们想要在UITextView上实现placeholder占位字,那么就需要给UITextView新增一个属性
.h文件
#import <UIKit/UIKit.h>
@interface placeholderview : UITextView
@property(nonatomic,copy)NSString *placeholder;
@property(nonatomic,strong)UIColor *placeColor;
@end
.m文件
#import "placeholderview.h"
@implementation placeholderview
-(id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if(self){
//文本内容改变时发布通知
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(textchange) name:UITextViewTextDidChangeNotification object:self];
}
return self;
}
-(void)textchange
{
//重新绘制
[self setNeedsDisplay];
}
//这个方法每次执行会先把之前绘制的去掉
-(void)drawRect:(CGRect)rect
{
//self.hasText这个是判断textView上是否输入了东东
if(!self.hasText){
//文字的属性
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
//设置字体大小
dict[NSFontAttributeName] = self.font;
//设置字体颜色
dict[NSForegroundColorAttributeName] = self.placeColor;
//画文字(rect是textView的bounds)
CGRect textRect = CGRectMake(5, 8, rect.size.width-10, rect.size.height-16);
[self.placeholder drawInRect:textRect withAttributes:dict];
}
}
@end
调用操作
//首先要导入这个类的头文件以及设置属性
#import "placeholderview.h"
@interface sendViewController ()
@property (nonatomic, strong) placeholderview *textView;
//然后就是设置显示的文本
//因为placeholder和placeColor已经成为textView的新属性所以就可以直接调用,而且由于我创建的这个类是继承于UITextView,那么新建的类同样也包含父类的属性
_textView.placeholder = @"分享新鲜事...";
_textView.placeColor = [UIColor grayColor];