RunTime运行时在iOS中的应用之UITextField占位符placeholder

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];

}

时间: 2024-10-18 13:14:03

RunTime运行时在iOS中的应用之UITextField占位符placeholder的相关文章

RunTime 在iOS中的应用与UITextField占位字符placeholder自定义

RunTime是一套比较底层的纯C语言API, 属于1个C语言库, 包含了很多底层的C语言API,在我们平时编写的OC代码中, 程序运行过程时, 其实最终都是转成了runtime的C语言代码, runtime算是OC的幕后工作者. 有的时候我们想改某个UI控件的某个属性,去查看头文件都没有找到,这时候我们用 RunTime 可以查看到这个控件的一些隐藏或是一些系统苹果官方不希望用户修改的属性 比如我们要查看UITextField 的一些属性 要在这他的.m文件里 导入头文件 #import <o

IOS开发——Runtime运行时

Runtime运行时,是objective-c底层C库,下面是详细的常用runtime函数使用解释,属于IOS开发高级进阶内容,有兴趣的朋友可以了解学习.

iOS:runtime运行时

1.什么是runtime运行时? runtime运行时是一套比较底层的纯C语言API, 属于1个C语言库, 包含了很多底层的C语言API. 在我们平时编写的OC代码中, 程序运行过程中, 其实最终都是转成了runtime的C语言代码, runtime算是OC的幕后工作者 比如说,下面一个创建对象的方法中, alloc方法和init方法,最终都是通过运行时发送消息来实现(消息机制) 1 //OC: 2 [[LJPerson alloc] init] ; 3 //runtime : 使用runtim

运行时(iOS)

运行时(iOS) 一.什么是运行时(Runtime)? 运行时是苹果提供的纯C语言的开发库(运行时是一种非常牛逼.开发中经常用到的底层技术) 二.运行时的作用? 能获得某个类的所有成员变量 能获得某个类的所有属性 能获得某个类的所有方法 交换方法实现 能动态添加一个成员变量 能动态添加一个属性 能动态添加一个方法 三.案例:运行时获取成员变量名称 1.分析 #import <Foundation/Foundation.h> #import "XMGPerson.h" #im

Runtime 运行时:类与对象

Runtime 运行时:类与对象 Objective-C语言是一门动态语言,它将很多静态语言在编译和链接时期做的事放到了运行时来处理.这种动态语言的优势在于:我们写代码时更具灵活性,如我们可以把消息转发给我们想要的对象,或者随意交换一个方法的实现等. 这种特性意味着Objective-C不仅需要一个编译器,还需要一个运行时系统来执行编译的代码.对于Objective-C来说,这个运行时系统就像一个操作系统一样:它让所有的工作可以正常的运行.这个运行时系统即Objc Runtime.Objc Ru

Runtime 运行时:方法与消息

Runtime 运行时:方法与消息 这一章,我们就要开始讨论Runtime中最有意思的一部分:消息处理机制.我们将详细讨论消息的发送及消息的转发. 基础数据类型 SEL SEL又叫选择器,是表示一个方法的selector的指针,其定义如下: typedef struct objc_selector *SEL; bjc_selector结构体的详细定义没有在 SEL sel1 = @selector(method1); NSLog(@"sel : %p", sel1); 输出: sel

iOS Runtime 运行时

Objc Runtime使得C具有了面向对象能力,在程序运行时创建,检查,修改类.对象和它们的方法.(Runtime是C和汇编编写的) Runtime系统是由一系列的函数和数据结构组成的公共接口动态共享库,在/usr/include/objc目录下可以看到头文件,可以用其中一些函数通过C语言实现Objective-C中一样的功能. Runtime 又叫运行时,是一套底层的 C 语言 API,其为 iOS 内部的核心之一,我们平时编写的 OC 代码,底层都是基于它来实现的. Objective-C

【iOS开发-117】block为什么用copy?利用runtime运行时的objc_方法为分类扩充成员变量

(1)block - (void)viewDidLoad { [super viewDidLoad]; __block int a=10; NSLog(@"a=%d",a); void (^blockName)()=^{ a=20; }; NSLog(@"a=%d",a); blockName(); NSLog(@"a=%d",a); } --以上输出结果是10,10,20. --只要在变量前面增加__block,在block里面就可以修改该变量

iOS面试—3、runtime运行时

https://www.cnblogs.com/zhangxiaoping/p/5146647.html Objective-C的运行时参考 配套指南 Objective-C的运行时编程指南 在宣布 IONDRVLibraries.h NSObjCRuntime.h objc / message.h objc / objc-api.h objc / objc.h objc / runtime.h 概述 本文档介绍了OS X的Objective-C 2.0运行库支持的函数和数据结构.该功能是在发现