先看效果图
- 是不是觉得很眼熟,经常做这种吧。给大家提供一个思路,一般这种我们需要造一个轮子,方便使用。是时候分析一波了:可以看到有2种类型的输入框,第一种右边带有图片的,第二种右边不带图片的。所以造轮子的时候要考虑进去。最好提供2种初始化的方法。但是最终走的都是同一个方法,只是参数有所不同而已(参见OC的工厂模式)。
- 同时每一个输入框在编辑状态下和普通状态下有显著的不同-边框颜色,右侧图片(如果有右侧图片)都发生了变化。最开始考虑使用代理来监测输入框的输入状态,根据不同的代理方法的状态来改变输入框的外观。但是转念一想似乎不妥,如果外界需要代理呢?难不成代理可以设置为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];
}
- 顺便提一下:输入框左侧的文字长度不一致,但要求左右对齐,中间留空,那么可以取巧使用中文的全角打一个或多个空格达到这个效果,当然遇到用这种方式也解决不了的,可以使设置字间距,但是字间距我用过有一些问题,就是最后一个文字没有在最右侧,和容器的最右侧有一定的间距,目前还没找到解决办法。如果哪位仁兄有好的思路,还请不吝赐教!