zoukankan      html  css  js  c++  java
  • iOS-改变UITextField的Placeholder颜色的三种方式

    转自:http://blog.csdn.net/mazy_ma/article/details/51775670

    有时,UITextField自带的Placeholder的颜色太浅或者不满足需求,所以需要修改,而UITextField没有直接的属性去修改Placeholder的颜色,所以只能通过其他间接方式去修改。

    例如:系统默认的Placeholder颜色太浅

    图1

    需要加深颜色,或者改变颜色

    图2

    方法一:通过attributedPlaceholder属性修改Placeholder颜色

        CGFloat viewWidth  = self.view.bounds.size.width;
        CGFloat textFieldX = 50;
        CGFloat textFieldH = 30;
        CGFloat padding    = 30;
    
        UITextField *textField = [[UITextField alloc] init];
        textField.frame = CGRectMake(textFieldX, 100, viewWidth - 2 * textFieldX, textFieldH);
        textField.borderStyle = UITextBorderStyleRoundedRect; // 边框类型
        textField.font = [UIFont systemFontOfSize:14];
        // 就下面这两行是重点
        NSAttributedString *attrString = [[NSAttributedString alloc] initWithString:@"请输入占位文字" attributes:
        @{NSForegroundColorAttributeName:[UIColor redColor],
                     NSFontAttributeName:textField.font
             }];
        textField.attributedPlaceholder = attrString;
        [self.view addSubview:textField];

    方法二:通过KVC修改Placeholder颜色

        UITextField *textField1 = [[UITextField alloc] init];
        textField1.frame = CGRectMake(textFieldX, CGRectGetMaxY(textField.frame) + padding, viewWidth - 2 * textFieldX, textFieldH);
        textField1.borderStyle = UITextBorderStyleRoundedRect;
        textField1.placeholder = @"请输入占位文字";
        textField1.font = [UIFont systemFontOfSize:14];
        // "通过KVC修改占位文字的颜色"
        [textField1 setValue:[UIColor greenColor] forKeyPath:@"_placeholderLabel.textColor"];
        [self.view addSubview:textField1];

    方法三:通过重写UITextField的drawPlaceholderInRect:方法修改Placeholder颜色

    1、自定义一个TextField继承自UITextField
    2、重写drawPlaceholderInRect:方法
    3、在drawPlaceholderInRect方法中设置placeholder的属性

    // 重写此方法
    -(void)drawPlaceholderInRect:(CGRect)rect {
        // 计算占位文字的 Size
        CGSize placeholderSize = [self.placeholder sizeWithAttributes:
                                  @{NSFontAttributeName : self.font}];
    
        [self.placeholder drawInRect:CGRectMake(0, (rect.size.height - placeholderSize.height)/2, rect.size.width, rect.size.height) withAttributes:
        @{NSForegroundColorAttributeName : [UIColor blueColor],
                     NSFontAttributeName : self.font}];
    }

    总结:
    1、当我们使用纯代码创建UITextField时,用第二种方法(KVC)修改占位文字颜色是最便捷的 。
    2、当我们使用XIB或者Storyboard创建UITextField时,通过自定义UITextField,修改占位文字颜色是最适合的。
    3、我们也可以在第三种重写方法中,通过结合第二种方法中的KVC修改属性来实现。

  • 相关阅读:
    jaxb 专题一(JAXB 实现java对象与xml之间互相转换)
    spring @Transactional注解参数详解
    Spring声明式事务管理与配置详解
    spring源码解析--事务篇(前篇)
    Java的三种代理模式
    Spring AOP面向切面编程详解
    Spring AOP基于注解的“零配置”方式实现
    Spring AOP 中pointcut expression表达式解析及配置
    Spring AOP详解
    一种解决maven单继承的办法
  • 原文地址:https://www.cnblogs.com/wanghang/p/6298813.html
Copyright © 2011-2022 走看看