现在手机研发产品,产品经理会对产品的一些效果要求越来越严格,越来越精细,比如最近在遇到了在登录注册界面,对输入框的要求如下,
-
1.登录框的毛玻璃效果
-
2.输入时光标的颜色为白色
-
3.
手机输入框的毛玻璃效果placeholder
颜色的要求:输入时是白色,不输入时是灰色,从技术角度来说就是becomeFirstResponder
和resignFirstRespond
对于以上3个问题我将来一一谈论我的解决的思路
-
1.对于毛玻璃效果首先想到的核心动画,重绘来实现这种效果,可是觉得这样实现起来未免太过复杂了,而且自己对这方面掌握的不是很好,做一个这个效果太费时间,转而我想到了,能不能让UI切一张图,我在这张图上放两个输入框这不就达到了这种效果,尝试后可行。
-
2.输入框光标的颜色默认颜色为蓝色,首先我百度了一下网上说得自定义一个UITextField,重写某些方法,总之百度失败,没有找到,最后我想能不能有某些属性可以改,点击command点击进入类别
查看了一下父类的属性找到了一个tintcolor
属性,设置后光标就变成了白的。 -
3.
`NSAttributedString`placeholder
默认的文字颜色是黑色,如何改它,我首先想到了UITextField
有没有提供给我们一个属性可以去修改,不过第一变没有找到,我就找代理方法,父类属性,还是没有找到,这时候我怀疑这个功能能不能实现呢,我就下了几个其他比较有名的APP,结果发现有些人家真能实现这个样式功能,看来是自己不行了没找到解决办法,所以我想到了一个高级的方法,通过Runtime找到UITextField
的某些成员变量,通过KVC赋值,结果完美的解决了问题。但是呢不太甘心难道placeholder
文字颜色这么难实现的?我又进入了UITextField
类声明的方法中
这是一个富文本类(带有属性的文字),以前用过这个类,在这个类中拥有string
这个属性,通过设置一些属性让这个字符串显示出不同的属性,例如字体大小,颜色,类型等等,总之比较好玩,现在将这段代码贴出来供大家掌握一些技术缓解一下上面技术点带来的压力,后面再详细解决上述问题。
//富文本属性测试
NSMutableDictionary *atts1 = [NSMutableDictionary dictionary];
atts1[NSFontAttributeName] = [UIFont systemFontOfSize:30];
NSMutableDictionary *atts2 = [NSMutableDictionary dictionary];
atts2[NSForegroundColorAttributeName] = [UIColor redColor];
NSMutableDictionary *atts3 = [NSMutableDictionary dictionary];
atts3[NSUnderlineStyleAttributeName] = [NSNumber numberWithInteger:2];
NSMutableAttributedString *attString = [[NSMutableAttributedString alloc] initWithString:@"这是一段测试的文字"];
[attString setAttributes:atts1 range:NSMakeRange(0, 1)];
[attString setAttributes:atts2 range:NSMakeRange(1, 3)];
[attString setAttributes:atts3 range:NSMakeRange(4, 2)];
[attString setAttributes:atts1 range:NSMakeRange(6, 2)];
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(100, 100, 300, 20)];
label.attributedText = attString;
[self.view addSubview:label];
测试的Label