RunTime的简单应用

作者: 傲视苍穹 | 来源:发表于2016-06-27 21:06 被阅读63次

首先就是在.m文件导入头文件

#import "objc/runtime.h"

通过RunTime对一个类的成员变量进行遍历

 unsigned int numIvars; //成员变量个数
    
    Ivar *vars = class_copyIvarList(NSClassFromString(@"UITextField"), &numIvars);
    
    NSString *key=[NSString new];
    
    for(int i = 0; i < numIvars; i++) {
        
        
        Ivar thisIvar = vars[i];
        
        key = [NSString stringWithUTF8String:ivar_getName(thisIvar)];  //获取成员变量的名字
        
        NSLog(@"成员变量的名字 ==== :%@", key);
        
        key = [NSString stringWithUTF8String:ivar_getTypeEncoding(thisIvar)]; //获取成员变量的数据类型
        
        NSLog(@"成员变量的数据类型 ===  :%@", key);
        
    }
    
    free(vars);

通过RunTime对一个类的成员函数进行遍历

    unsigned int numMeths; //成员函数的个数
    Method *meth = class_copyMethodList(NSClassFromString(@"UIView"), &numIvars);
        
    for(int i = 0; i < numMeths; i++) {
        
        Method thisMeth = meth[i];
        SEL sel = method_getName(thisMeth);
        
        const char *name = sel_getName(sel);
        
        NSLog(@"成员函数===== :%s", name);
        
    }
    
    free(meth);

应用理念就是通过RunTime获取我们想要的一个类的成员变量的名称。然后我们可以通过KVC的方式获得其对象,进而进行操作。


下面有一个应用的小例子

最初的图.png

通过RunTime获取成员变量的名称

  unsigned int numIvars; //成员变量个数
  
  Ivar *vars = class_copyIvarList(NSClassFromString(@"UISearchBar"), &numIvars);
  
  NSString *key=[NSString new];
  
  for(int i = 0; i < numIvars; i++) {
      
      
      Ivar thisIvar = vars[i];
      
      key = [NSString stringWithUTF8String:ivar_getName(thisIvar)];  //获取成员变量的名字
      
      NSLog(@"成员变量的名字 ==== :%@", key);
      
      key = [NSString stringWithUTF8String:ivar_getTypeEncoding(thisIvar)]; //获取成员变量的数据类型
      
      NSLog(@"成员变量的数据类型 ===  :%@", key);
      
  }
  
  free(vars);

然后通过KVC获取对象

self.searchBar = [[UISearchBar alloc]initWithFrame:CGRectMake(12, 12,kWindowW-12*2-60, 32)];
    _searchBar.layer.cornerRadius = 16;
    _searchBar.layer.masksToBounds = YES;
    _searchBar.delegate = self;
    _searchBar.keyboardType = UIKeyboardAppearanceDefault;
    _searchBar.placeholder =  @"输入手机号码或名字";
    _searchBar.barStyle = UIBarStyleDefault;
    _searchBar.barTintColor = [UIColor greenColor];
    [searchHeaderView addSubview:_searchBar];

       //去掉搜索图标
    UITextField *searchField = [_searchBar valueForKey:@"_searchField"];//_searchField就是通过RunTime找到的成员变量的名称。
    searchField.leftView = nil;
    searchField.clipsToBounds = YES;

    //    同理可以更改placeholder的颜色
    //    [searchField setValue:[UIColor purpleColor] forKeyPath:@"_placeholderLabel.textColor"];

最终的图.png

想要一起学习的童鞋们可以加一下!!!!!

学习交流群

相关文章

  • Runtime全面剖析之原理篇

    如果想了解Runtime的实际应用请看Runtime全面剖析之简单使用 一:Runtime简介二: Runtime...

  • runtime简单应用

    1.获取对象属性和变量列表 这里准备了一个Model类 在要查看它属性列表的类里引入头文件: 然后实现如下代码: ...

  • Runtime的简单应用

    自己最近在研究Runtime,研究好久才知道了一些大概和简单的应用。在这里做一个笔记。RunTime被称为iOS开...

  • RunTime的简单应用

    首先就是在.m文件导入头文件 通过RunTime对一个类的成员变量进行遍历 通过RunTime对一个类的成员函数进...

  • runTime的简单应用

    利用runtime,我们能够根据服务端所给的image来动态的变化TabBarItem的大小,类似像淘宝、京东活动...

  • Runtime的应用

    Runtime的应用 Runtime的应用

  • 【Swift】runtime简单应用

    1、获取属性列表 2、模型中基本类型不能设置为可选类型,因为kvc是oc的,而oc中基本类型没有可选。 另外属性不...

  • 自己实现OC的KVO

    Runtime系列文章在这:Runtime介绍---术语介绍Runtime应用--动态添加方法Runtime应用-...

  • Runtime快速上手(1)

    依照惯例跳过Runtime的介绍,这里只介绍Runtime的基本用法和简单应用例子。 一、获取属性列表 输出结果:...

  • iOS Runtime 的应用场景

    前言 上次简单介绍了 Runtime 的原理,和 Runtime 常用的操作。下面就来介绍一下常见的几种应用场景。...

网友评论

    本文标题:RunTime的简单应用

    本文链接:https://www.haomeiwen.com/subject/mtazdttx.html