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

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值