iOS_黑(5)_UITextField修改全局placehol

作者: 丶纳凉 | 来源:发表于2017-05-27 11:15 被阅读76次

    一丶原理

    修改placeholder的方法:

    1.
    myTextField.placeholder = @"请输入用户名!";  
    [myTextField setValue:[UIColor redColor] forKeyPath:@"_placeholderLabel.textColor"];  
    [myTextField setValue:[UIFont boldSystemFontOfSize:16] forKeyPath:@"_placeholderLabel.font"];
    
    
    2.建议使用:
    NSMutableAttributedString *placeholderAtbString = [[NSMutableAttributedString alloc] initWithString:placeholder];
    [placeholderAtbString addAttribute:NSForegroundColorAttributeName
                        value:kMianColor_8997B0
                        range:NSMakeRange(0, placeholder.length)];
    self.attributedPlaceholder = placeholderAtbString;
    

    修改全局:

    runtime替换系统placeholder方法;

    二丶代码

    #import "UITextField+HYBPlaceHolder.h"
    
    @implementation UITextField (HYBPlaceHolder)
    
    + (void)load{
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
            
            Class selfClass = [self class];
            
            SEL oriSEL = @selector(setPlaceholder:);
            Method oriMethod = class_getInstanceMethod(selfClass, oriSEL);
            
            SEL cusSEL = @selector(ZB_setPlaceholder:);
            Method cusMethod = class_getInstanceMethod(selfClass, cusSEL);
            
            BOOL addSucc = class_addMethod(selfClass, oriSEL, method_getImplementation(cusMethod), method_getTypeEncoding(cusMethod));
            if (addSucc) {
                class_replaceMethod(selfClass, cusSEL, method_getImplementation(oriMethod), method_getTypeEncoding(oriMethod));
            }else {
                method_exchangeImplementations(oriMethod, cusMethod);
            }
            
        });
        
    }
    
    - (void)ZB_setPlaceholder:(NSString *)placeholder{
        
        NSMutableAttributedString *placeholderAtbString = [[NSMutableAttributedString alloc] initWithString:placeholder];
        [placeholderAtbString addAttribute:NSForegroundColorAttributeName
                            value:kMianColor_8997B0
                            range:NSMakeRange(0, placeholder.length)];
        self.attributedPlaceholder = placeholderAtbString;
        
        [self ZB_setPlaceholder:placeholder];
    }
    
    
    @end
    
    注意事项:

    项目中的Placeholder必须用代码去设置,xib的并不走setPlaceholder方法;
    xib实现代码:

    + (void)load{
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
            
            Class selfClass = [self class];
            {
                SEL oriSEL = @selector(initWithCoder:);
                Method oriMethod = class_getInstanceMethod(selfClass, oriSEL);
                
                SEL cusSEL = @selector(ZB_initWithCoder:);
                Method cusMethod = class_getInstanceMethod(selfClass, cusSEL);
                
                BOOL addSucc = class_addMethod(selfClass, oriSEL, method_getImplementation(cusMethod), method_getTypeEncoding(cusMethod));
                if (addSucc) {
                    class_replaceMethod(selfClass, cusSEL, method_getImplementation(oriMethod), method_getTypeEncoding(oriMethod));
                }else {
                    method_exchangeImplementations(oriMethod, cusMethod);
                }
            }
          
        });
        
    }
    - (instancetype)ZB_initWithCoder:(NSCoder *)coder
    {
        id obj = [self ZB_initWithCoder:coder];
        if (obj) {
             [self setValue:kColor_8997B0 forKeyPath:@"_placeholderLabel.textColor"];
        }
        return  obj;
    }
    
    

    相关文章

      网友评论

        本文标题:iOS_黑(5)_UITextField修改全局placehol

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