ios 登录功能学习研究
登录功能是我在湖畔做的第一个需求。
当时PD给我的草图和下图类似:
(图片来自知乎iOS客户端登录界面)
不过需求中要求用户名或者密码错误时,输入框要抖动(类似Mac登录密码错误的抖动效果)。
如果实现上图的UI布局,那么输入框抖动是上下单元格独立抖动还是整体抖动?
- 独立抖动:会出现上下单元格边界不齐的断裂效果,破坏美感。
- 整体抖动:只是用户名错误,密码框为什么抖动?给用户的提示不清晰。
我个人不希望给用户不友好的信息,所以我做成了下面的效果:

由于我做的效果和PD想要的不一致,所以还产生了一番讨论。
为此,不得不向PD普及一下网站登录检查的基本流程,让他知道会先检查用户名是否存在,才会进一步判断用户名和密码是否匹配。
我是以前写过一段时间PHP做网站,自然而然就这么想了。那么,PD同学不了解相关知识,是否可以理解呢?
突然有疑惑,一毕业就在互联网行业当产品经理的同学,大多是什么专业毕业,应该具备哪些专业背景呢?我个人认为核心素质之一是站在用户的角度思考问题。这里是知乎的一份讨论。
最后,PD同学在被服务器端同学鄙视了一下的情况下,也赞同了该方案。
在这个模块中,主要涉及到UITextField以及一些用户输入交互特性。
以用户名输入框为例,上面两张登录图都可以输入Email,那么此时的键盘应该呈什么布局呢?
不妨看下几个客户端的登录界面:
(湖畔iOS版登录界面)
刚开始做登录模块时,我将键盘设置为UIKeyboardTypeEmailAddress类型,不过后来PD一直强调要改回英文键盘(即UIKeyboardTypeAlphabet类型)。因为对于中文用户来说,EmailAddress类型键盘默认是中文的,输入过程中会有中文提示产生,如下面第二张知乎截图。
不过我们来认真探究下用户的输入体验,以jasonlee.ljp@gmail.com为例:
- UIKeyboardTypeAlphabet:用户在输入点号或者@符号时需要进行键盘切换,所以在输入上述邮箱时一共要切换6次键盘类型。
- UIKeyboardTypeEmailAddress:看起来在输入过程中会产生中文字符,不过该类型的键盘布局包含了 @ 符号和 . 圆点符号。当输入@符号或者点号时,用户输入的所有字符会作为英文字母放进输入框中,只需要在最后敲一下“确认”键。
所以,就我个人的体验来说,我认为是UIKeyboardTypeEmailAddress类型是更友好的。
(知乎iOS版登录界面)
当我为湖畔用户名输入框设置为UIKeyboardTypeEmailAddress类型时,我特地看了下知乎登录界面的用户名输入框,那时候知乎采用的是UIKeyboardTypeAlphabet类型。当时我沾沾自喜了下,没想到现在颠倒过来。谁在进步,谁在退步?
(新浪微博iOS版登录界面)
新浪微博的键盘默认也是UIKeyboardTypeEmailAddress类型的,更进一步说明了问题。
其实,苹果本身特地提供了UIKeyboardTypeEmailAddress类型键盘就很说明问题了。
(微信iOS版)
微信一直广受好评,尤其是最近关于“张小龙”、“微信”、“产品”的热门词汇(1,2,3),更是将其拥上了另一个高台。
不过,就我浅薄的认知,我认为上面两张微信截图的键盘布局都应该是UIKeyboardTypeAlphabet类型的。
首先看“修改微信号”界面。微信号只能包含字母、数字、下划线和减号,那么设置UIKeyboardTypeEmailAddress键盘类型并没有为用户提供便利,且由于上面提过的默认中文键盘问题,用户在输入过程中会有中文字符产生,相较于流畅的纯英文输入,会有“阻碍感”和“不爽感”。我个人觉得这是正常的用户心理,当然,也有可能我不是正常的用户?
另外,登录界面就多了QQ号和手机号两种账号类型,且都是纯数字的,所以这里的帐号约等于微信号。那么,这里的键盘布局为什么和“修改微信号”的键盘布局不一致,使用默认的中文键盘呢?
所以,我个人认为,在这两个界面中,中文键盘对用户来说都是一种阻碍,应该设置为UIKeyboardTypeAlphabet类型。
腾讯是很追求产品细节和用户体验的,微信更是腾讯产品中的佼佼者,为何会存在这样的细节问题?或者是由于我视野太局限,看不懂?
(QQ登录界面)
QQ的新界面还是令人耳目一新,颇有档次的。而键盘布局也没什么特别好说的,就是纯数字。
--------------------------------------------------
除了键盘类型的使用:_usernameText.keyboardType = UIKeyboardTypeAlphabet;,UITextField还涉及了其它一些细节处理:
- 设置边框类型:[_usernameText setBorderStyle:UITextBorderStyleRoundedRect];。关于边框类型,这里有详细说明。
- 设置默认文案:_usernameText.placeholder = TEXT_LOGIN_NAME_PLACEHOLDER;,给用户友好提示。
- 设置控件内容的对齐方式:_usernameText.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;,这里有详细说明。
- 设置首字符是否默认大写:_usernameText.autocapitalizationType = UITextAutocapitalizationTypeNone;。
- 设置是否开启纠错提醒:_usernameText.autocorrectionType = UITextAutocorrectionTypeNo;。
- 设置何时提供clear按钮:_usernameText.clearButtonMode = UITextFieldViewModeWhileEditing;,这里有相关说明。
- 设置成为焦点:[_usernameText becomeFirstResponder];。当界面中除了输入框和登录按钮外,最好一开始就让输入框成为响应者,好让键盘遮掉空白部分。
- 设置是否密文显示:_userpwdText.secureTextEntry = YES;。如果是密码输入框,当然要了。
- 设置回车键类型:_usernameText.returnKeyType = UIReturnKeyNext;,这里有更多说明。通常,输入完用户名,我们还需要输入密码,所以设置为UIReturnKeyNext类型;而输入完密码,就完成输入要进行登录了,所以要设置为UIReturnKeyDone类型。
最后,我们还要设置代理:_usernameText.delegate = self;。
通过代理方法,我们可以进行更多的控制,比如:
- - (BOOL)textFieldShouldReturn:(UITextField *)textField:响应回车键处理。
- - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string:做一些过滤处理。比如SO上有一份关于退格键检测的讨论。
更多可参见官方文档。
ios 登录功能学习研究的更多相关文章
- node+vue进阶【课程学习系统项目实战详细讲解】打通前后端全栈开发(1):创建项目,完成登录功能
第一章 建议学习时间8小时·分两次学习 总项目预计10章 学习方式:详细阅读,并手动实现相关代码(如果没有node和vue基础,请学习前面的vue和node基础博客[共10章]) 视频教程地 ...
- 如何在ios中集成微信登录功能
在ios中集成微信的登录功能有两种方法 1 用微信原生的api来做,这样做的好处就是轻量级,程序负重小,在Build Settings 中这样设置 然后设置 友盟的设置同上,但是要注意,加入你需要的所 ...
- SpringBoot + Spring Security 学习笔记(五)实现短信验证码+登录功能
在 Spring Security 中基于表单的认证模式,默认就是密码帐号登录认证,那么对于短信验证码+登录的方式,Spring Security 没有现成的接口可以使用,所以需要自己的封装一个类似的 ...
- Go语言学习教程:管理员登录功能开发
学习完了数据库操作的知识以后.本节内容,我们将实现管理员登陆功能,涉及到多个模块的代码实现和逻辑处理,以及数据库表的操作,都将在本节内容中进行实现. 管理员结构体定义 首先我们要定义管理员这个实体的结 ...
- JavaWeb学习记录(六)——用户登录功能
使用JDBC.spring框架.servlet实现一个简单的用户登录功能. 一.mySql数据库 SET FOREIGN_KEY_CHECKS=0; -- ---------------------- ...
- JFinal Web开发学习(七)使用layUI美化的登录功能
效果: 验证码还是没有布局好.背景比较怀古. 1.写前端html login.jsp <!DOCTYPE html> <html> <head> <meta ...
- Android学习笔记_65_登录功能本身没有任何特别
对于登录功能本身没有任何特别,使用httpclient向服务器post用户名密码即可.但是为了保持登录的状态(在各个Activity之间切换时要让网站知道用户一直是处于登录的状态)就需要进行cooki ...
- Struts+Hibernate+Spring实现用户登录功能
通过登录案例实现三大框架之间的整合,登录功能是任何系统和软件必不可少的一个模块,然而通过这个模块来认识这些复杂的框架技术,理解数据流向和整个设计思路是相当容易的.只有在掌握了这些小模块的应用后,才能轻 ...
- 从无到有实现登录功能以及thinkphp怎么配置数据库信息
好开心,终于解决了.从学习android到现在写登录功能已经不是一次两次了,如今再写想着肯定是信手拈来,没有想到的是尽然折磨了我一天的时间才搞定它.唉...... 先来看几张截图,这次的登录跟以往的不 ...
随机推荐
- CTP Release() 的注意问题
测试时发现CThostFtdcMdSpi有个比较严重的问题,就是使用Release()退出清理对象时 会出现死机,并且频率很高,怎样解决? 答:请参考以下代码的释放顺序. template <c ...
- echarts散点图重叠
今天做echarts图标,使用了散点图.很快实现,发现数据不对,应该是3个的企业,页面只显示了2个,查了半天才发现原来是有两个重叠了.想办法解决了,在网上费劲九牛二虎只力终于找到了解决的方法,下面来解 ...
- mysql驱动包下载
- E. XOR and Favorite Number (莫队板子题)
题目链接 #include <bits/stdc++.h> using namespace std; typedef long long ll; inline int read() { , ...
- hdu6311( 2018 Multi-University Training Contest 2)
bryce1010模板 http://acm.hdu.edu.cn/showproblem.php?pid=6311 从dls思路中,我整理一下自己的思路: 1.首先也是建图 2.建图结束后,一个df ...
- MFC 创建UI线程
对于windows来说,所有的线程都是一样的,但MFC却把线程区分为两种:用户界面(UI)线程和工作者线程.用户界面线程具有消息循环而工作者线程没有.UI线程可以创建窗口并给这些窗口发送消息,工作者线 ...
- RTT
Segger RTT的使用 一般arm系统中,如何通过电脑键盘和显示器同mcu进行交互最有效的有两种形式:arm7的semihost,cm时代的traceswo.现在jlink推出了颇具特色的rtt( ...
- avalon使用体验
最近在用avalon做项目,使用的感受是,它确实会比angualr学习成本更低,我不需要花很多时间去了解它的功能,没有指令.没有服务,花一个晚上看看API就差不多能着手用了.avalon的视图它提供了 ...
- 湖南省2016省赛题。1809: Parenthesis 线段树
http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1809 给定一串平衡的序列,要求交换两个位置之后,问其是否还平衡. 首先要注意到交换的是两个位置,这 ...
- Mysql5.7免编译版自动安装脚本
一:readme: .此脚本仅仅适合于5.7免面编译安装版本. .安装是需自己选择mysql软件安装包:例如mysql--linux-glibc2.-x86_64.-linux-glibc2.-x86 ...