iOS沉淀

[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];
上一篇下一篇

猜你喜欢

热点阅读