iOS開發之自訂UITextField的方法_IOS

來源:互聯網
上載者:User

UITextField是IOS開發中使用者互動中重要的一個控制項,常被用來做帳號密碼框,輸入資訊框等。

觀察效果圖

UITextField有以下幾種特點:

1.預設佔位文字是灰色的

2.當游標點上去時,佔位文字變為白色

3.游標是白色的

接下來我們通過不同的方法來解決問題

一.將xib中的UITextField與代碼關聯

通過NSAttributeString方法來更改佔位文字的屬性(void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading the view from its nib.//文字屬性NSMutableDictionary *dict = [NSMutableDictionary dictionary];dict[NSForegroundColorAttributeName] = [UIColor grayColor];//帶有屬性的文字(富文字屬性)NSAttributeStringNSAttributedString *attr = [[NSAttributedString alloc] initWithString:@"手機號" attributes:dict];self.phoneField.attributedPlaceholder = attr;} 

但是這種方法只能做出第一種效果,而且不具有通用性。

二.自訂一個UITextField的類

重寫它的drawPlaceholderInRect方法

//畫出佔位文字- (void)drawPlaceholderInRect:(CGRect)rect {[self.placeholder drawInRect:CGRectMake(0, 13, self.size.width, 25) withAttributes:@{NSForegroundColorAttributeName : [UIColor grayColor],NSFontAttributeName : [UIFont systemFontOfSize:14]}];}

這個方法和上一個方法類似,只能做出第一種效果,但這個具有通用性

三.利用Runtime運行時機制

Runtime是官方的一套C語言庫

能做出很多底層的操作(比如訪問隱藏的一些成員變數\成員方法)

(void)initialize {unsigned int count = 0;Ivar *ivars = class_copyIvarList([UITextField class] , &count);for (int i = 0; i < count; i++) {//取出成員變數Ivar ivar = *(ivars + i);//列印成員變數名字DDZLog(@"%s",ivar_getName(ivar));}}

利用class_copyIvarList這個C函數,將所有的成員變數列印出來

這樣我們就可以直接通過KVC進行屬性設定了

- (void)awakeFromNib {//修改佔位文字顏色[self setValue:[UIColor grayColor] forKeyPath:@"_placeholderLabel.textColor"]; //設定游標顏色和文字顏色一致self.tintColor = self.textColor;}

通過這個方法可以完成所有的效果,既具有通用性也簡單

最後一個效果是

在獲得焦點時改變佔位文字顏色

在失去焦點時再改回去

//獲得焦點時- (BOOL)becomeFirstResponder {//改變佔位文字顏色[self setValue:self.textColor forKeyPath:@"_placeholderLabel.textColor"]; return [super becomeFirstResponder];}//失去焦點時- (BOOL)resignFirstResponder {//改變佔位文字顏色[self setValue:[UIColor grayColor] forKeyPath:@"_placeholderLabel.textColor"]; return [super resignFirstResponder];} 
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.