学会一些东西程序员iOS

玩转iOS中UITextField的placeholder颜色

2016-09-08  本文已影响4054人  xxxxxxxxx_ios
珍惜时间

UITextField是iOS开发中经常使用到的控件,它有一个placeholder属性,也就是占位文字。默认占位文字颜色是70% gray,但有时我们可能需要修改其占位文字的颜色,下文中将为大家介绍三中修改方法,并就动态改变颜色做相关说明(关于动态改变:当UITextField为第一响应者时为一种颜色,取消第一响应者时为另一种颜色)。

方法1


NSMutableDictionary *attrs = [NSMutableDictionary dictionary]; // 创建属性字典
  attrs[NSFontAttributeName] = [UIFont systemFontOfSize:17]; // 设置font
  attrs[NSForegroundColorAttributeName] = [UIColor greenColor]; // 设置颜色
  NSAttributedString *attStr = [[NSAttributedString alloc] initWithString:@"夏虫不可以语冰" attributes:attrs]; // 初始化富文本占位字符串
  self.textField.attributedPlaceholder = attStr;
NSMutableAttributedString *attStr = [[NSMutableAttributedString alloc] initWithString:@"夏虫不可以语冰"];
 [attStr setAttributes:@{NSForegroundColorAttributeName : [UIColor redColor],
                            NSFontAttributeName : [UIFont systemFontOfSize:15.0]} range:NSMakeRange(0, 2)];
 [attStr setAttributes:@{NSForegroundColorAttributeName : [UIColor greenColor],
                            NSFontAttributeName : [UIFont systemFontOfSize:17.0]} range:NSMakeRange(2, 3)];
 [attStr setAttributes:@{NSForegroundColorAttributeName : [UIColor blueColor],
                            NSFontAttributeName : [UIFont systemFontOfSize:15.0]} range:NSMakeRange(5, 2)];
    self.textField.attributedPlaceholder = attStr;

方法2


- (void)drawPlaceholderInRect:(CGRect)rect
{
    [self.placeholder drawInRect:CGRectMake(0, 2, rect.size.width, 25) withAttributes:@{ NSFontAttributeName: [UIFont systemFontOfSize:16.0],
                                        NSForegroundColorAttributeName : [UIColor blueColor],
                                     }];
}

方法3


#import "SJTextField.h"
#import <objc/runtime.h>
@implementation SJTextField

// 初始化调用一次 用于查看UITextField中的成员属性和变量
+ (void)initialize
{
    [self getIvars];
    // [self getProperties];
}

// 获取所有属性
+ (void)getProperties
{
    unsigned int count = 0;
    objc_property_t *properties = class_copyPropertyList([UITextField class], &count);
    for (int i = 0; i<count; i++) {
        // 取出属性
        objc_property_t property = properties[i];
        
        // 打印属性名字
        NSLog(@"%s<---->%s", property_getName(property), property_getAttributes(property));
    }
    free(properties);
}

// 获取所有成员变量
+ (void)getIvars
{
    unsigned int count = 0;
    // 拷贝出所有的成员变量列表
    Ivar *ivars = class_copyIvarList([UITextField class], &count);
    for (int i = 0; i<count; i++) {
        // 取出成员变量
        //        Ivar ivar = *(ivars + i);
        Ivar ivar = ivars[i];
        
        // 打印成员变量名字
        NSLog(@"%s %s", ivar_getName(ivar), ivar_getTypeEncoding(ivar));
    }
    // 释放
    free(ivars);
}
@end
#import "SJTextField.h"
#import <objc/runtime.h>
@implementation SJTextField
static NSString * const SJPlacerholderColorKeyPath = @"_placeholderLabel.textColor";
- (void)awakeFromNib
{
// 设置placeholder开始颜色(方式一)
//    UILabel *placeholderLabel = [self valueForKeyPath:@"_placeholderLabel"];
//    placeholderLabel.textColor = [UIColor redColor];   
   // 设置placeholder开始颜色(方式二)
    [self setValue:[UIColor greenColor] forKeyPath:SJPlacerholderColorKeyPath];
    // 不成为第一响应者
    [self resignFirstResponder];
}

/**
 * 当前文本框聚焦时就会调用
 */
- (BOOL)becomeFirstResponder
{
    // 修改占位文字颜色
    [self setValue:[UIColor redColor] forKeyPath:SJPlacerholderColorKeyPath];
    return [super becomeFirstResponder];
}

/**
 * 当前文本框失去焦点时就会调用
 */
- (BOOL)resignFirstResponder
{
    // 修改占位文字颜色
    [self setValue:[UIColor greenColor] forKeyPath:SJPlacerholderColorKeyPath];
    return [super resignFirstResponder];
}
@end
未进入编辑状态 进入编辑状态
上一篇下一篇

猜你喜欢

热点阅读