1. 程式人生 > >RunTime運行時在iOS中的應用之UITextField占位符placeholder

RunTime運行時在iOS中的應用之UITextField占位符placeholder

指向 field 失去 程序 拷貝 ace 底層 文本 ram

RunTime運行時機制

runtime是一套比較底層的純C語言API, 屬於1個C語言庫, 包含了很多底層的C語言API。

在我們平時編寫的OC代碼中, 程序運行過程時, 其實最終都是轉成了runtime的C語言代碼, runtime算是OC的幕後工作者,下面介紹一下runtime的一個應用用於遍歷出UITextField的有那些隱藏屬性,查出後再通過KVC來進行修改這個屬性

//第一次用到這類的時候就會調用的只會調用一次方法 ,這個方法查的時候用一下 ,以後不用

+ (void)initialize{

unsigned int count = 0;

// 拷貝出所有的成員變量列表 ivars是指向這個數組的指針也是指向首個元素的指針

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

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

//數組名其實就是指向數組首元素的指針 如果指針是指向數組的首元素,就可把指針當數組一樣用

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 可設置光標的顏色等

self.tintColor = self.textColor;

//一加載這個TextField時讓裏面的占位字符變灰色 就讓文本輸入框失去焦點z(因為在重寫失去焦點時設置了文字變灰色)

[self resignFirstResponder];

}

// 當文本輸入框成為第一響應者就會調用

- (BOOL)becomeFirstResponder{

[self setValue:self.textColor forKeyPath:@"_placeholderLabel.textColor"];

return [super becomeFirstResponder];

}

// 當文本輸入框失去焦點的時個會調用的方法

- (BOOL)resignFirstResponder{

//通過 KVC 訪問 _placeholderLabel.textColor 屬性 設置顏色

[self setValue:[UIColor grayColor] forKeyPath:@"_placeholderLabel.textColor"];

return [super resignFirstResponder];

}

RunTime運行時在iOS中的應用之UITextField占位符placeholder