用 RunTime 为 UITextView 设置占位文本并实时改变文本框占位文本的颜色

来源:互联网 发布:大庆三打一网络直播 编辑:程序博客网 时间:2024/05/21 22:59

UITextView 实现占位文本的方式有很多种,网上一搜一大把,,这里只介绍 最简单 的一种,如标题所述:RunTimeUITextView 设置占位文本并实时改变文本框占位文本的颜色。

RunTime 不太了解的童鞋可以简单看下这篇文章:iOS开发之 - Runtime,懒得点击鼠标的话我这里也简单的说下,Runtime 简称运行时,是苹果官方的一套比较底层的纯 C 语言 API, 用它可以做很多底层操作(比如访问隐藏的成员变量和方法)。

OK,足够了,接下来我们就抓紧时间来看看如何用 RunTime 为 UITextView 设置占位文本并实时改变文本框占位文本的颜色。。。

首先我们利用 RunTime 获取一下 UITextView 中一些隐藏的成员变量
- (void)viewDidLoad {    [super viewDidLoad];    //  获取 UITextView 中所有的成员变量    unsigned int count = 0;    Ivar *ivars = class_copyIvarList([UITextView class], &count);    for (int i = 0; i < count; i ++) {        Ivar ivar = ivars[i];        // ivar_getName(ivar) 意思是获取成员变量名字,如果想获得成员变量的类型用这个 ivar_getTypeEncoding(ivar)        const char *name = ivar_getName(ivar);        NSString *objcName = [NSString stringWithUTF8String:name];        NSLog(@"    %d     %@    ", i, objcName);    }    // 释放    free(ivars);}
打印结果如下(这里直接放截图)

UITextView 中的属性

从上面的截图中我们可以看出,打印的结果里有一个 placeHolderLabel 的私有变量,即 UITextView 类内部有一个名为“_placeHolderLabel”的私有成员变量。那么就简单多了,我们现在就对这个私有变量进行操作。具体的步骤如下:

- (void)setupTextView {    _textView = [[UITextView alloc] initWithFrame:CGRectMake(0, 50, [UIScreen mainScreen].bounds.size.width, 200)];    _textView.delegate = self;    _textView.tintColor = [UIColor whiteColor];    _textView.font = [UIFont systemFontOfSize:15.f];    _textView.backgroundColor =[UIColor grayColor];    [self.view addSubview:_textView];    UILabel *placeholderLabel = [[UILabel alloc] init];    placeholderLabel.text = @"请输入内容请输入内容请输入内容请输入内容请输入内容请输入内容请输入内容请输入内容请输入内容请输入内容请输入内容";    placeholderLabel.font = [UIFont systemFontOfSize:15.f];    placeholderLabel.textColor = [UIColor whiteColor];    placeholderLabel.numberOfLines = 0;    [placeholderLabel sizeToFit];    [_textView addSubview:placeholderLabel];    [_textView setValue:placeholderLabel forKey:@"_placeholderLabel"];}

上面代码做的事情,无非是创建一个 UITextView 和一个 UILabel 控件,然后通过键值对的原理给 UITextView 中的 _placeholderLabel 这一属性赋值,,,就不详细注释了,重要的是这种思想。。。只需上面这段代码,我们就已经完成了利用 RunTime 为 UITextView 设置占位文本。效果图如下,比较丑但很实用

阅读全文
0 0