zoukankan      html  css  js  c++  java
  • RunTime的简单使用

    Runtime也就是运行时,是苹果官方提供的一套C语音库,那有什么作用呢?简单的来说,Runtime可以做很多的底层操作,比如说访问隐藏的一些成员变量,成员方法,当然包括了私有的成员变量,成员方法.

    举个简单的例子,如果我们想要修改TextField的placeholder的颜色,那该怎么做? 在TextField的所提供的api中并没有直接提供修改的方法,当然还是有attributedPlaceholder的这个方法,如果单独来看这个方法,没有接触过的话,不会知道这个可以修改placeholder的颜色,那么 我们可以通过Runtime的方法,打印出TextField的所用成员变量,那么一定可以找到我们想要的属性,而系统自带的属性,通常都是只读属性,那么我们只需要通过KVC就可以实现赋值,KVC的最大的作用就是给只读属性赋值拉~~

    使用Runtime的话,需要引头文件

    #import <objc/runtime.h>

    // 程序刚开始的时候会运行,bi且只会运行一次
    + (void)initialize {
        [self getIvars];
    }
    
    + (void)getIvars {
        unsigned int count = 0;
        
        // 拷贝出所有的成员变量列表
        Ivar *ivars = class_copyIvarList([UITextField class], &count);
        
        for (int i = 0; i < count; i ++) {
            // 取出成员变量
            Ivar ivar = ivars[i];
            QYLog(@"%s, %s", ivar_getName(ivar), ivar_getTypeEncoding(ivar));
        }
        // 释放
        free(ivars);
    }

    通过 打印的结果可以发现

    通过KVC就可以简单的处理了placeholder的颜色

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

    那么,上面也说了也可以通过attributedPlaceholder的这个方法,那么怎么做,简单的介绍一下 ,纯属个人见解~~

        // 文本属性
        
        NSMutableDictionary *attrs = [NSMutableDictionary dictionary];
        attrs[NSForegroundColorAttributeName] = [UIColor redColor];
        
        // NSAttributedString 一种带有属性的文字
        NSAttributedString *myTextField = [[NSAttributedString alloc]initWithString:@"我的世界" attributes:attrs];
        self.MyTextField.attributedPlaceholder = myTextField;

    attributedPlaceholder这个方法是一种带有属性的文字,通过系统提供的特定的key来改变一些属性

    哈~ 效果丑了点

    但这个方法也之类似的还有一个类NSMutableAttributedString, NSMutableAttributedString具有attributedPlaceholder的所有方法,但是自身还具备区间使用

    // 通过区间,来使每一个字都发生变化
    NSMutableAttributedString *myTextField = [[NSMutableAttributedString alloc] initWithString:@"我的世界"];
      // 第一个字, 天蓝色,默认字体大小
        [myTextField setAttributes:@{NSForegroundColorAttributeName : [UIColor cyanColor]} range:NSMakeRange(0, 1)];
    // 第二个字, 黄色,字体20号
        [myTextField setAttributes:@{
                                    NSForegroundColorAttributeName : [UIColor yellowColor],
                                    NSFontAttributeName : [UIFont systemFontOfSize:20]
                                    } range:NSMakeRange(1, 1)];
    // 第三个字, 红色,默认字体大小
        [myTextField 
    setAttributes:@{NSForegroundColorAttributeName : [UIColor redColor]} range:NSMakeRange(2, 1)];
    // 第四个字, 紫色,默认字体大小
        [myTextField setAttributes:@{NSForegroundColorAttributeName : [UIColor purpleColor]} range:NSMakeRange(3, 1)];
        self.MyTextField.attributedPlaceholder = myTextField;

    不同attributedPlaceholder, 虽然使用比较麻烦,但是所达到的效果还是挺令人惊讶的

    .. 。.. 

  • 相关阅读:
    去除 .sh 文件的
    Shell Notepad++导致报错:#!/bin/bash: 坏的解释器: 没有那个文件或目录
    linux 不同格式的软件包的安装
    linux:jenkins 默认安装目录
    使用nsis制作的安装包安装后,无法卸载干净的问题
    bash: ./t.sh:/bin/bash^M:损坏的解释器: 没有那个文件或目录
    jenkins启动/重启/停止命令 改端口
    解决windows系统80端口被占用问题
    find ./ -name *.bak | xargs rm -rf
    Linux查看端口占用情况,释放占用的端口
  • 原文地址:https://www.cnblogs.com/xueyao/p/5389216.html
Copyright © 2011-2022 走看看