iOS&UITextView中的placeholder属性

一看标题,就很屌丝!

的确,系统不给咱们,那咱们就自己弄!

具体步骤:

  1,创建一个类,继承UITextView.取名ZHHTextView;

  2,在drawRect:中实现placeholder,其中用到通知来监听text的change.

大概的步骤就着两步,具体实现,看代码.<一行代码解千言>

现在将.m文件代码公布如下:

 

#import "ZHHTextView.h"

 

@implementation ZHHTextView

 

- (instancetype)initWithFrame:(CGRect)frame {

    if (self = [super initWithFrame:frame]) {

        NSLog(@"%s",__func__);

        //注册通知.要用到通知的用意:监听内容的变化

        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(viewTextChange) name:UITextViewTextDidChangeNotification object:nil];

    }

    return self;

}

 

- (void)viewTextChange {

    // 执行此方法,系统自动调用drawRect:方法

    [self setNeedsDisplay];

    

    NSLog(@"%s",__func__);

    

}

 

- (void)dealloc {

    //取消通知,你不取消试试,看你的项目会不会崩

    [[NSNotificationCenter defaultCenter] removeObserver:self];

}

 

 

// Only override drawRect: if you perform custom drawing.

// An empty implementation adversely affects performance during animation.

- (void)drawRect:(CGRect)rect {

    // Drawing code

    

    // 如果有内容,则返回

    if (self.hasText)return;

    

    // 给placeholder添加属性

    NSMutableDictionary *attributes = [NSMutableDictionary dictionary];

    //这里最好还是要与self.font同步

    attributes[NSFontAttributeName] = [UIFont systemFontOfSize:15.0];

    attributes[NSForegroundColorAttributeName] = [UIColor grayColor];

    

    // 其实placeholder是画上去的,既然是画上去的,必须给定具体的位置与尺寸

    CGFloat x = 5;

    CGFloat w = rect.size.width - 2 * x;

    CGFloat y = 8;

    CGFloat h = rect.size.height - 2 * y;

    CGRect placeholderRect = CGRectMake(x, y, w, h);

    NSString* placeholder = @"请输入鸿歌的QQ...";

 

 // 这个方法很经典

    [placeholder drawInRect:placeholderRect withAttributes:attributes];

}

 

 

@end

 

OK了.

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。