RunTime运行时在iOS中的应用之UITextField占位符placeholder
RunTime運(yùn)行時機(jī)制
runtime是一套比較底層的純C語言API, 屬于1個C語言庫, 包含了很多底層的C語言API。
在我們平時編寫的Objective-C代碼中, 程序運(yùn)行過程時, 其實(shí)最終都是轉(zhuǎn)成了runtime的C語言代碼, runtime算是OC的幕后工作者,下面介紹一下用runtime遍歷出UITextField的一些隱藏屬性,查出后再通過KVC來進(jìn)行修改這個屬性,其他的控件都可使用此類似的方法。
?
//第一次用到這類的時候就會調(diào)用的只會調(diào)用一次方法 ,這個方法查的時候用一下 ,用于遍歷出UITextField的一些隱藏屬性,以后不用這個方法
+ (void)initialize{
? ? unsigned int count = 0;
? ? // 拷貝出所有的成員變量列表 ? ivars是指向這個數(shù)組的指針也是指向首個元素的指針
? ? Ivar *ivars = class_copyIvarList([UITextField class], &count);
? ? for (int i = 0; i < count; ++i) {
? ? ? ? //數(shù)組名其實(shí)就是指向數(shù)組首元素的指針? 如果指針是指向數(shù)組的首元素,就可把指針當(dāng)數(shù)組一樣用
? ? ? ? Ivar t = ivars[i];
? ? ? ? //打印成員變量名 ?在控制臺打印輸出查找到屬性 ??_placeholderLabel
? ? ? ? NSLog(@"%s",ivar_getName(t));
? ? }
? ? // 釋放指針變量 ivars 是拷貝過的所以用完要釋放
? ? free(ivars);
}
?
- (instancetype)initWithFrame:(CGRect)frame{
? ? if(self = [super initWithFrame:frame]){
? ? ? ? [self setupUI];
? ? }
? ? return self;
}
?
- (void)awakeFromNib{
? ? [super awakeFromNib];
? ? [self setupUI];
}
?
- (void)setupUI{
? ? self.textColor = [UIColor whiteColor];
? ? //tintColor 可設(shè)置光標(biāo)的顏色等
? ? self.tintColor = self.textColor;
?? ?
? ? //一加載這個TextField時讓里面的占位字符變灰色 就讓文本輸入框失去焦點(diǎn)z(因?yàn)樵谥貙懯ソ裹c(diǎn)時設(shè)置了文字變灰色)
? ? [self resignFirstResponder];
}
?
// 當(dāng)文本輸入框成為第一響應(yīng)者就會調(diào)用
- (BOOL)becomeFirstResponder{
? ? [self setValue:self.textColor forKeyPath:@"_placeholderLabel.textColor"];
? ? return [super becomeFirstResponder];
}
?
// 當(dāng)文本輸入框失去焦點(diǎn)的時個會調(diào)用的方法
- (BOOL)resignFirstResponder{
? ? //通過 KVC 訪問 _placeholderLabel.textColor 屬性 設(shè)置顏色
? ? [self setValue:[UIColor grayColor] forKeyPath:@"_placeholderLabel.textColor"];
? ? return [super resignFirstResponder];
}
轉(zhuǎn)載于:https://www.cnblogs.com/chenweb/p/7096802.html
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的RunTime运行时在iOS中的应用之UITextField占位符placeholder的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 启动VIP报CRS-1028/CRS-0
- 下一篇: luogu P3817 小A的糖果