美文网首页
iOS 自定义UITextField placeholder文字

iOS 自定义UITextField placeholder文字

作者: 宁愿无言 | 来源:发表于2018-03-22 09:56 被阅读0次

    一、简单设置

    placeholder,输入框的占位符,其文字可以直接设置
    tf.placeholder = @"占位符";

    光标颜色可以也可以直接设置
    tf.tintColor = [UIColor whiteColor];

    二、还是简单设置

    设置placeholder占位符的颜色

    1、通过富文本设置

    // 通过富文本设置占位符字体颜色
    NSMutableDictionary * attributeDic = [NSMutableDictionary new];
    attributeDic[NSForegroundColorAttributeName] = [UIColor whiteColor];
    tf.attributedPlaceholder = [[NSAttributedString alloc]initWithString:self.placeholder attributes:attributeDic];
    

    2、通过kvc设置

    // 通过kvc获得UITextField的UIPlaceHolderLabel(父类私有属性)属性
    UILabel *label = [self valueForKey:@"placeholderLabel"];
    label.textColor = [UIColor grayColor];
    tf.placeholderColor = label.textColor;
    
     // 这个是上面的简写 
    [tf setValue:[UIColor grayColor] forKeyPath:@"placeholderLabel.textColor"];
    

    三、简单设置 动态改变placeholder字体颜色

    就像这样


    光标.gif

    这需要监听UITextField的编辑状态。
    需要清楚,textfield的结构。通过debug view hierarchy模式可以看到,UITextField上是有一层UITextFieldLabel控件的,但该控件是其系统私有控件,我们无法直接使用。但可以通过kvc去直接赋值。


    WechatIMG1.jpeg

    三个方法:

    1、利用添加事件来监视textfield的编辑状态(这个好用)

    // 开始编辑
    [tf addTarget:self action:@selector(eventEditingDidBegin) forControlEvents:UIControlEventEditingDidBegin];
    // 结束编辑
    [tf addTarget:self action:@selector(eventEditingDidEnd) forControlEvents:UIControlEventEditingDidEnd];
    
    // 开始编辑 变白
    - (void)eventEditingDidBegin{
        [tf setValue:[UIColor whiteColor] forKey:@"placeholderLabel.textColor"];
    }
    // 结束编辑 变灰
    - (void)eventEditingDidEnd {
        [tf setValue:[UIColor grayColor] forKey:@"placeholderLabel.textColor"];
    }
    

    2、通过 通知 来监听 (也好用)

    我这个是自定义的UITextField,所以观察者和对象都是self

    // 监听开始编辑
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(eventEditingDidBegin) name:UITextFieldTextDidBeginEditingNotification object:self];
    // 监听编辑结束
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(eventEditingDidEnd) name:UITextFieldTextDidEndEditingNotification object:self];
    

    还是调用上面那俩方法

    // 开始编辑 变白
    - (void)eventEditingDidBegin{
        [tf setValue:[UIColor whiteColor] forKey:@"placeholderLabel.textColor"];
    }
    // 结束编辑 变灰
    - (void)eventEditingDidEnd {
        [tf setValue:[UIColor grayColor] forKey:@"placeholderLabel.textColor"];
    }
    

    3、利用UITextfield的代理<UITextFieldDelegate>

    这个在自定义的textfield里面不能用,因为要设置自己为自己的代理
    self.delegate = self;
    如果外界也使用这个自定义textfield的时候,如果用到代理UITextFieldDelegate,就会调用self.delegate = self;,把代理换掉。切记切记!

    - (void)textFieldDidBeginEditing:(UITextField *)textField{
          [tf setValue:[UIColor whiteColor] forKey:@"placeholderLabel.textColor"];
    }
    - (void)textFieldDidEndEditing:(UITextField *)textField{
         [tf setValue:[UIColor grayColor] forKey:@"placeholderLabel.textColor"];
    }
    

    相关文章

      网友评论

          本文标题:iOS 自定义UITextField placeholder文字

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