说到用户注册功能,现在很多app都是使用手机号来作为注册的依据,那自然就离不开手机验证码。为了防止用户重复点击,一般都会做一个倒计时显示。当用户点击后,按钮变灰,并显示xx秒后重新获取,倒计时结束后恢复按钮状态。
实现起来也不难,关于定时器,可以使用NSTimer或者GCD。不过还是有几个事项需要注意一下:
1、关于控件选择,是UIButton还是UILabel?
表面上看这个功能用UIButton实现应该很简单,一来UIButton本身就有点击事件,二来控制UIButton的颜色、是否可点击(userInteractionEnabled)都很方便。但是实际情况是当倒计时开始后,每秒修改UIButton文字时会出现闪烁(画面请自行脑补)。
所以我选择的是UILabel,通过给他添加tap手势实现点击事件,缺点是没有点击反馈效果。
2、当用户点击获取验证码后,再返回(视图被pop或者dismiss),再进入这个视图(push或者present),“获取验证码”又变成了可以点击状态,还是存在短时间重复点击的可能。这个情况要说他有漏洞也确实有点勉强,但是还是会有某一群人会觉得很严重。
那如果不幸的是这一群人中有你的leader或者产品经理或者tester(我就属于不幸的那伙人),呵呵,你“呵呵”之后,又不得不去fix 这个“bug”。
我这里已经实现了上述功能,并将相关代码封装成了一个工具类,代码放到github上了,这里是链接。
下面是最终的效果: