利用Runtime给UITextView添加占位符(新方法)

时间:2021-01-26 20:37:00

 以前一直使用自定义UITextView通过通知中心来自定义placeHolder,最近看到这个方法,感觉更好

UITextView *textView = [[UITextView alloc]initWithFrame:CGRectMake(0, 100, [UIScreen mainScreen].bounds.size.width, 100)];

[textView setBackgroundColor:[UIColor greenColor]];

textView.font = [UIFont systemFontOfSize:14];

[self.view addSubview:textView];

UILabel *placeHolderLabel = [[UILabel alloc] init];

placeHolderLabel.text = @"请输入内容";

placeHolderLabel.numberOfLines = 0;

placeHolderLabel.textColor = [UIColor lightGrayColor];

placeHolderLabel.font = [UIFont systemFontOfSize:14];

[placeHolderLabel sizeToFit];

[textView addSubview:placeHolderLabel];

[textView setValue:placeHolderLabel forKey:@"_placeholderLabel"];

因为KVC的底层是Runtime实现的,通过Rumtime发现UITextView内部有一个名为“_placeHolderLabel”的私有成员变量

可以Runtime打印出UITextView的属性

unsigned int count;

Ivar *ivars = class_copyIvarList([UITextView class], &count);

for (int i = 0 ; i < count; i++) {

Ivar ivar = ivars[i];

const char *name = ivar_getName(ivar);

NSString *objcName = [NSString stringWithUTF8String:name];

NSLog(@"%d : %@",i,objcName);

}