zoukankan      html  css  js  c++  java
  • UITextView添加占位符 placeholder

    UITextField和UITextView是最常用的文本接受类和文本展示类的控件。UITextField和UITextView都可以输入文本,也都可以监听文本的改变。但不同的是,UITextField继承自UIControl这个抽象类。UITextView继承自UIScrollView这个实体类。这就导致了UITextView可以多行展示内容,并且还可以像UIScrollView一样滚动。而UITextField只能单独的展示一行内容。从这个角度,UITextView在功能上是优于UITextField的。
    但是,UITextField中有一个placeholder属性,可以设置UITextField的占位文字,起到提示用户输入相关信息的作用。可是,UITextView就没那么幸运了,apple没有给UITextView提供一个类似于placeholder这样的属性来供开发者使用,但是需求中往往又需要用到UITextView这个控件且还需要占位符。所以,不多说,直接上代码:
     

     unsigned int count = 0;

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

            

            if ([objcName isEqualToString:@"_placeholderLabel"]) {

                

                UILabel *placeHolderLabel = [[UILabel alloc] init];

                placeHolderLabel.text = @"我是占位符";

                placeHolderLabel.numberOfLines = 0;

                placeHolderLabel.textColor = [UIColor lightGrayColor];

                [placeHolderLabel sizeToFit];

                [_surveyNoteTextView addSubview:placeHolderLabel];

                placeHolderLabel.font = _surveyNoteTextView.font;

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

                

                break;

            }

        }

        

        free(ivars);

    通过runtime,我发现,UITextView内部有一个名为“_placeHolderLabel”的私有成员变量。大家知道,Objective-C没有绝对的私有变量,因为我们可以通过KVC来访问私有变量。

  • 相关阅读:
    浅析平台营销
    基于物联网技术和RFID电子客票的铁路自己主动检票机
    海量数据存储
    Windows Serer 2003 配置手册 – 创建Active Dictionary域
    Java实现字符串转换成整数
    Java实现字符串转换成整数
    Java实现俄式乘法
    Java实现俄式乘法
    Java实现俄式乘法
    Java实现俄式乘法
  • 原文地址:https://www.cnblogs.com/hauler/p/7503888.html
Copyright © 2011-2022 走看看