zoukankan      html  css  js  c++  java
  • 利用Runtime给UITextView添加占位符(新方法)

     以前一直使用自定义UITextView通过通知中心来自定义placeHolder,最近看到这个方法,感觉更好

     

        UITextView *textView = [[UITextView alloc]initWithFrame:CGRectMake(0100, [UIScreen mainScreen].bounds.size.width100)];

        [textView setBackgroundColor:[UIColor greenColor]];

        textView.font = [UIFont systemFontOfSize:14];

        [self.view addSubview:textView];

     

        UILabel *placeHolderLabel = [[UILabel allocinit];

        placeHolderLabel.text = @"请输入内容";

        placeHolderLabel.numberOfLines = 0;

        placeHolderLabel.textColor = [UIColor lightGrayColor];

        placeHolderLabel.font = [UIFont systemFontOfSize:14];

        [placeHolderLabel sizeToFit];

        

        [textView addSubview:placeHolderLabel];

     

        [textView setValue:placeHolderLabel forKey:@"_placeholderLabel"];

     

    因为KVC的底层是Runtime实现的,通过Rumtime发现UITextView内部有一个名为“_placeHolderLabel”的私有成员变量

    可以Runtime打印出UITextView的属性

     

       unsigned int count;

        

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

        

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

            Ivar ivar = ivars[i];

            const char *name = ivar_getName(ivar);

            NSString *objcName = [NSString stringWithUTF8String:name];

            NSLog(@"%d : %@",i,objcName);

        }

  • 相关阅读:
    react绑定事件
    js基础
    浅谈vue中index.html、main.js、App.vue、index.js之前的关系以及加载过程
    jmeter+influxdb+grafana搭建压测监控平台
    javascript中的constructor
    javascript es6新增语法之`${}`
    微服务网关 ----- Nginx 和 Zuul 的区别
    Spring AOP SpringBoot集成
    Spring AOP 面向切面编程入门
    Vue中$refs与$emit的区别及使用场景实例
  • 原文地址:https://www.cnblogs.com/xsiOS/p/5706732.html
Copyright © 2011-2022 走看看