改變UITextField占位文字顏色的兩種方法

在開發(fā)中,我們許多時候要改變文本框的占位顏色,畢竟默認(rèn)顏色有點丑??而且在點亮非點亮狀態(tài)顏色也不一樣的時候,視覺效果更好,這就需要我們提供方便快捷的修改UITextField的占位文字顏色方法,下面我介紹自己比較熟悉的幾種方法,并在最后提供個人開發(fā)中的小細(xì)節(jié)和技巧

1.富文本屬性

    // 創(chuàng)建字典描述富文本
    NSMutableDictionary *attr = [NSMutableDictionary dictionary];
    attr[NSForegroundColorAttributeName] = placeholderColor;
    
    // 創(chuàng)建富文本字符串
    NSAttributedString *attrStr = [[NSAttributedString alloc] initWithString:self.placeholder attributes:attr];
    
    // 設(shè)置富文本屬性占位文字
    self.attributedPlaceholder = attrStr;

2.利用Runtime獲取私有的屬性名稱,利用KVC設(shè)置屬性

    UILabel *label = [self valueForKeyPath:@"placeholderLabel"];
    
    label.textColor = placeholderColor;
  
 //兩種方法等價 
 // [self setValue:placeholderColor forKeyPath:@"_placeholderLabel.textColor"];   

關(guān)于通過runtime獲得此屬性代碼如下:


    #import <objc/message.h> //需要包含此頭文件
    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可以獲取該私有屬性,還可以通過斷點調(diào)試,獲得該屬性

使用中的細(xì)節(jié)和技巧

我在開發(fā)中是將該方法寫在UITextField的分類中,并通過property生成placeholderColor的setter,getter方法,這樣我們在開發(fā)中就可以通過點語法調(diào)用該方法,更加方便.頭文件代碼如下:

#import <UIKit/UIKit.h>

@interface UITextField (Placeholder)

@property  UIColor *placeholderColor;

//- (void)setPlaceholderColor:(UIColor *)placeholderColor; 使用property生成方法,并通過點語法調(diào)用

@end

使用中有一個細(xì)節(jié),就是在上面方法中進(jìn)行優(yōu)化,提高擴展性,以為如果我們在viewdidload方法中,先設(shè)置placeholderColor,在設(shè)置占位文字是無效的,也就說該方法擴展性不夠好,因此,通過優(yōu)化,最終的代碼如下:

- (void)setPlaceholderColor:(UIColor *)placeholderColor
{
// 需要注意的是此優(yōu)化,放在富文本屬性中無效
 if (self.placeholder.length == 0) {
        self.placeholder = @" ";
    }
 [self setValue:placeholderColor forKeyPath:@"_placeholderLabel.textColor"];
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 占位文字1、曾經(jīng)有個這么一個項目需求: 使用textField時,占位文字默認(rèn)是黑色的,我們的需求是當(dāng)開始編輯時,...
    博行天下閱讀 1,024評論 2 1
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,062評論 25 709
  • 這段時間學(xué)習(xí)了android網(wǎng)絡(luò)應(yīng)用, 由于主線程中不能處理耗時事件 . 然后到網(wǎng)上找資料, 發(fā)現(xiàn)度推薦使用Han...
    浮生未歇ywp閱讀 929評論 0 0
  • 讀書寫字要成長,好好加油!
    聶一一閱讀 98評論 0 0
  • 天涯到底在哪里?天涯到底遠(yuǎn)不遠(yuǎn)?人在天涯追逐著自己心中的那一輪明月,總會感覺到它的光和熱。我們的心在暗夜里會感到空...
    公子莊閱讀 255評論 0 0

友情鏈接更多精彩內(nèi)容