先看效果圖
編輯狀態(tài)下和普通狀態(tài)下的TextField
- 是不是覺得很眼熟液茎,經(jīng)常做這種吧。給大家提供一個思路乔妈,一般這種我們需要造一個輪子蝙云,方便使用。是時候分析一波了:可以看到有2種類型的輸入框路召,第一種右邊帶有圖片的勃刨,第二種右邊不帶圖片的波材。所以造輪子的時候要考慮進去。最好提供2種初始化的方法身隐。但是最終走的都是同一個方法廷区,只是參數(shù)有所不同而已(參見OC的工廠模式)。
- 同時每一個輸入框在編輯狀態(tài)下和普通狀態(tài)下有顯著的不同-邊框顏色抡医,右側(cè)圖片(如果有右側(cè)圖片)都發(fā)生了變化躲因。最開始考慮使用代理來監(jiān)測輸入框的輸入狀態(tài),根據(jù)不同的代理方法的狀態(tài)來改變輸入框的外觀忌傻。但是轉(zhuǎn)念一想似乎不妥,如果外界需要代理呢搞监?難不成代理可以設(shè)置為2個對象水孩?我感覺行不通。
- 于是就想到了這個東西
- (BOOL)becomeFirstResponder;
- (BOOL)resignFirstResponder
我們完全可以重寫這2個方法啊琐驴。
于是得到了下面的代碼俘种,完美解決需求。
- (BOOL)becomeFirstResponder
{
if (self.borderColorForEditing) {
self.layer.borderColor = _borderColorForEditing.CGColor;
}
if (self.rightImageForEditing) {
[self setRightImageViewForState:UIControlStateFocused];
}
return [super becomeFirstResponder];
}
- (BOOL)resignFirstResponder
{
if (self.borderColorForNormal) {
self.layer.borderColor = _borderColorForNormal.CGColor;
}
if (self.rightImageForNormal) {
[self setRightImageViewForState:UIControlStateNormal];
}
return [super resignFirstResponder];
}
- 順便提一下:輸入框左側(cè)的文字長度不一致绝淡,但要求左右對齊宙刘,中間留空,那么可以取巧使用中文的全角打一個或多個空格達到這個效果牢酵,當(dāng)然遇到用這種方式也解決不了的悬包,可以使設(shè)置字間距,但是字間距我用過有一些問題馍乙,就是最后一個文字沒有在最右側(cè)布近,和容器的最右側(cè)有一定的間距,目前還沒找到解決辦法丝格。如果哪位仁兄有好的思路撑瞧,還請不吝賜教!