本节目纯属扯淡,如有得罪,还请。。。。。。有本事你来打我呀!!!
【 每日·槽】第3话 – UITextField的七宗罪
每日槽,用生命在吐槽!
今天来讨(tu)论(cao)下 TextField 的七宗罪。
1、设置文字的函数命名
我最近做了个 登录界面 记住 账号密码的功能,需要用户一登录,上次的输入会自动填充。
这个功能首先需要读取用户在 TextField 里输入的内容,然后保存下来。所以我.h文件里一查,读取文字的函数是:getStringValue()。
接下来需要的功能是往 TextField 写内容,我想这个函数应该是 setStringValue(str)吧。结果证明我还是太天真,这个函数竟然不存在!经过我的苦苦搜寻,原来是setText(str)。好吧我忍了。
后来,我需要给按钮设置文字,这次我用setText(str)没错了吧,哦哈哈。但结果再次证明我还是太天真,再次苦苦查询,原来是setTitleText(str)。
总结下:
Text,TextField:
设置文字:setText();
读取文字:getStringValue();
Button:
设置文字:setTitleText()
读取文字:getTitleText()
[掀桌]
坑爹呢这是!你们内部用着 cocos2d-x 的setString 和 getString 这么统一一致的接口名,自己的名字这么随意潇洒有个性,难道你就不会脸红吗?命名这么混乱你家里人知道吗?
2、密码框的setText(str)
没办法,我也改变不了这么奇葩的命名方式,只能继续忍了。接着做“记住密码”的功能。在用户第二次登录时,自动填充密码。但。。。。密码怎么是明文显示的!我命名在编辑器里设置了显示‘*’啊,之前注册登录都是星号!

3、字体拉伸
再看看注册界面。。。为什么字体会拉伸!??我在编辑器里看占位符是正常的呀!
编辑器里效果:

实际效果:

经过我反复测试,原来:调整TextField的大小尺寸不能选Custom,这样会拉伸。要调整大小只能选择缩放。
我觉得没人会想要上面那种拉伸的效果吧。应该避免这种效果出现。
4、弹出的虚拟键盘会挡住输入框。
我在论坛里也看到有人问这个问题,解决方法见cocos2d-sample 里的栗子,竟然需要我们自己写一个action将场景往上移动,等输入完毕再移动下来。。。。好吧。
如图:我点击密码框,控件被挡住,完全看不到输入内容。

5、用户输入完毕必须点击虚拟键盘上的 ‘return’才能撤回键盘。
这个体验非常不爽,开始我还以为是卡住了。解决方法只能修改源码,我之前改过一次,点击空白处键盘会收回。但版本一升级,还得再改,太麻烦了。
6、TextField的响应范围会莫名其妙的改变。
比如当只有1个字的时候,只有点中中间那么一小块地方,才会弹出键盘。当把内容全部删掉,还是只有那么一小块地方可以响应。想像下如果用户需要重新输入密码,会多么的痛苦。
![]()
上面的TextField我设置了输入长度限制。而当我没有限制输入长度的时候:先输入一长串:

再删掉内容,这时候如果点击红圈处,键盘也会弹出来。

我觉得响应区域应该固定为TextField的大小。
7、没有闪烁的光标。
当然这个功能对于目前的TextField来说太高大上了,先把最基本的功能完善好再说吧。
今天每日槽就到这里,小伙伴们有没有要补刀的,欢迎留言!
往期回顾:
【 每日·槽】第1话 – 论setEnabled和setVisible
http://www.cocoachina.com/bbs/read.php?tid=181496
【 每日·槽】第2话 – 模态窗口的制作
http://www.cocoachina.com/bbs/read.php?tid=181959
【 每日·槽】第3话-- UITextField的七宗罪 http://www.cocoachina.com/bbs/read.php?tid=182207
【 每日·槽】第4话-- UI
TextField 中文字符的长度检测问题
http://www.cocoachina.com/bbs/read.php?tid=187118
【
每日·槽】第5话 – 2014CocoaChina春季开发者大会实吐
http://www.cocoachina.com/bbs/read.php?tid=194385
支持不错!~