UItextFieldプレース文字の色を変更する2つの方法

2062 ワード

开発の中で、私达は多くの时にテキストの枠の占位の色を変えなければならなくて、结局デフォルトの色は少し丑くて、しかも点灯していない状态の色も异なっている时、视覚の効果はもっと良くて、これは私达がUITextFieldの占位の文字の色の方法を简単に修正することを提供する必要があって、以下私は自分の比较的に熟知しているいくつかの方法を绍介して、そして最後に個人の開発の中の小さい細部と技巧を提供します
1.リッチテキスト属性
    //          
    NSMutableDictionary *attr = [NSMutableDictionary dictionary];
    attr[NSForegroundColorAttributeName] = placeholderColor;
    
    //         
    NSAttributedString *attrStr = [[NSAttributedString alloc] initWithString:self.placeholder attributes:attr];
    
    //            
    self.attributedPlaceholder = attrStr;

2.Runtimeでプライベート属性名を取得し、KVCで属性を設定する
    UILabel *label = [self valueForKeyPath:@"placeholderLabel"];
    
    label.textColor = placeholderColor;
  
 //       
 // [self setValue:placeholderColor forKeyPath:@"_placeholderLabel.textColor"];   

runtimeによるこの属性コードの取得については、次のとおりです.

    #import  //        
    unsigned int count = 0;
    
    Ivar *ivars = class_copyIvarList([UITextField class], &count);
    
    for (int i = 0; i < count; i++) {
        Ivar ivar = ivars[i];
        
        NSLog(@"%s----%s", ivar_getName(ivar), ivar_getTypeEncoding(ivar));
    }

//     runtime         ,         ,     

使用中の詳細とテクニック
私は開発中にこの方法をUItextFieldの分類に書いて、propertyを通じてplaceholderColorのsetter、getter方法を生成して、このように私達は開発中に点文法を通じてこの方法を呼び出すことができて、更に便利です.ヘッダー・ファイル・コードは次のとおりです.
#import 

@interface UITextField (Placeholder)

@property  UIColor *placeholderColor;

//- (void)setPlaceholderColor:(UIColor *)placeholderColor;   property    ,        

@end

使用の詳細は、viewdidloadメソッドでplaceholderColorを先に設定すると、プレースホルダ文字の設定が無効になり、拡張性が低下するため、最適化により最終的なコードは次のようになります.
- (void)setPlaceholderColor:(UIColor *)placeholderColor
{
//          ,          
 if (self.placeholder.length == 0) {
        self.placeholder = @" ";
    }
 [self setValue:placeholderColor forKeyPath:@"_placeholderLabel.textColor"];
}