UITextView- 设置placeholder占位文字

作者: Andy_WangPeng | 来源:发表于2016-07-01 09:05 被阅读407次

    ----->在开发中,随着输入文字的增多,Textfile已经不能满足我们的需求了,它的不能换行功能,也是让我们着急一番。我们只有选择UITextView了,可是UITextView没有(placeholder)占位文字的功能,真是鱼和熊掌不可兼得。下面我们来实现一下:

    • 我们自定义一个UITextView

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

    WBPlaceholderTextView.m文件
    #import "WBPlaceholderTextView.h"
    @implementation WBPlaceholderTextView
    - (instancetype)initWithFrame:(CGRect)frame
    {
    self = [super initWithFrame:frame];
    if (self) {
    //监听文本的输入
    [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(textDidChange) name:UITextViewTextDidChangeNotification object:self];
    }
    return self;
    }
    - (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];
    }
    - (void)textDidChange{
    //重绘
    [self setNeedsDisplay];
    }
    - (void)drawRect:(CGRect)rect {
    //如果文本框有值就返回
    if (self.hasText) return;
    CGFloat X = 5;
    CGFloat Y = 8;
    CGFloat W = rect.size.width - 2 * X;
    CGFloat H = rect.size.width - 2 * Y;
    NSMutableDictionary *attrt = [NSMutableDictionary dictionary];
    attrt[NSForegroundColorAttributeName] = self.placeholderColor?self.placeholderColor:[UIColor grayColor];
    attrt[NSFontAttributeName] = self.font?self.font:[UIFont systemFontOfSize:17.0];
    [self.placeholder drawInRect:CGRectMake(X, Y,W,H) withAttributes:attrt];
    }
    //移除通知,预防野指针
    -(void)dealloc{
    [[NSNotificationCenter defaultCenter]removeObserver:self];
    }
    @end

    至此一个带有placeholder占位文字的Textview已经完成,喜欢请戳添加关注,我们一起讨论.

    联系我QQ:2258026527

    相关文章

      网友评论

      • Andy_WangPeng:嗯 :relaxed: ,没想到这点
      • 郑明明:在这个方法中也添加一个通知,这样无论是从纯代码方式加载还是从xib以及storyboard加载都可以有效
      • 郑明明:给个建议,再写一个awakeFromNib方法
        Andy_WangPeng:@NtZheng 建议很好,谢谢支持
      • 混不吝丶:利用两个代理方法就能做
        老司机Wicky:@Andy_WangPeng 别闹,不到万不得已不要使用drawRect方法,苹果本身就不推荐使用这个方法,而且这个方法还是比较吃内存的。最后,9以后textview本身都有一个placeholderLabel的私有属性,而且相关逻辑都是处理好的,只是没有对外暴露接口。runtime可以看到属性名。
        Andy_WangPeng:@混不吝丶 对,这样的性能好一些,不容易出问题
        程序猿界的cai渣渣:@混不吝丶 画出来的比较实用
      • Andy_WangPeng:欢迎支持哟~~
      • 岳阳_:不错不错 学习了 :smiley:
        Andy_WangPeng:@岳阳_ 欢迎支持哟~

      本文标题:UITextView- 设置placeholder占位文字

      本文链接:https://www.haomeiwen.com/subject/aaufjttx.html