以前一直使用自定义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);
}