(三十七)从私人通讯录引出的细节I -Notification -Segue -HUD -延时
来源:互联网 发布:淘宝图片如何加护盾 编辑:程序博客网 时间:2024/06/05 19:42
细节1:账号和密码都有值的时候才可以点击登录按钮,因此应该监听文本框的文本改变。
因为文本框的文本改变代理不能处理,因此应该使用通知Notification。
文本框文本改变会发出通知:通知的前两个参数表示接收者object接收到通知时调用哪个类的哪个函数。
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textChange) name:UITextFieldTextDidChangeNotification object:self.accountField];
只要有监听必须有移除:
- (void)dealloc{ [[NSNotificationCenter defaultCenter] removeObserver:self];}只要修改textChange函数即可保证当用户名框或者密码框改变会调用,当两者都有内容时,才可以点击登陆按钮。
- (void)textChange{ self.loginBtn.enabled = (self.accountField.text.length && self.pwdField.text.length);}
细节2:记住密码和自动登录两项,如果勾选了自动登录就自动勾选记住密码,如果用户取消了记住密码,自动登录会自动取消。
并且类似这种 文字+开关 的按钮(如下图),应该用一个View来作为父控件,方便管理:
为了监听按钮的状态改变(值改变),不再是监听按钮的点击,应该监听ValueChange事件。
连线时选择Action、ValueChange事件:
Tip:开关有一个BOOL成员on用来表示开关关闭还是开启,它的get方法是isOn。
细节3:登录成功后,点击注销应当做一个提醒,一般使用底部消息框。
底部工具栏使用ActionSheet,通过称为UIActionSheet的代理来监听点击:并通过代理方法确定点击的按键。
Tip:取消按钮的索引为0.
UIActionSheet *sheet = [[UIActionSheet alloc] initWithTitle:@"确定要注销?" delegate:self cancelButtonTitle:@"取消" destructiveButtonTitle:@"确定" otherButtonTitles:nil, nil];[sheet showInView:self.view];
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex{ if (buttonIndex != 0) return; [self.navigationController popViewControllerAnimated:YES];}
细节4:控件拖线实现的跳转是无法拦截的,为了实现登陆跳转,不能直接将按钮拖过去。
可以通过控制器拖线过去,拖线的好处是可以传递Segue来传递信息。
Storyboard上每一根用来进行界面跳转的线,都是一个UIStoryboardSegue对象。
Segue有三个属性:
1.唯一标识:identifier
2.来源控制器:sourceViewController
3.目标控制器:destinationViewController
Segue的类型:
1.自动型:点击某个控件自动执行跳转。直接从控件拖过去的是自动型。
2.手动型:从来源控制器拖线到目标控制器。注意要设定identifier,使用来源控制器的performSegueWithIdentifier: sender:方法就可以执行Segue。
细节5:账号、密码错误时的提醒尽量不使用弹窗,因为不够友善(还需要多点击一次确定才行)。
应该设计出信息自动消失的提示,如果自己设计一个Label渐渐消失是比较麻烦的,可以通过第三方框架来实现。
第三方类库可以参考CocoaChina上的这篇文章:http://www.cocoachina.com/industry/20130106/5478.html
Tip:HUD是指示器,用来提示一些信息。
这里使用MBProgressHUD类库。可以实现漂亮的提示:
细节6:延时的实现,使用dispatch_after方法。延时的时候应该显示一个蒙板(遮盖),防止用户随意点击。
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ });NSEC_PER_SEC前面乘的数字就是秒,block内部写延时完毕后执行的代码。
使用MBProgressHUD的方法showMessage可以产生一个蒙板,toView方法不传递参数(nil)表示显示在窗口上。
遮盖需要移除,使用hideHUD方法来移除。
- (三十七)从私人通讯录引出的细节I -Notification -Segue -HUD -延时
- (三十八)从私人通讯录引出的细节II -数据逆传 -tableView点击 -自定义分割线
- 私人通讯录
- 私人通讯录
- 私人通讯录中遇到的注意点
- (五)超级猜图Demo引出的细节
- 练习:私人通讯录(整理思路)
- 练习:私人通讯录(数据的归档解档和删除某一行)
- iOS学习项目(19-私人通讯录②-归档的学习)
- 私人通讯录思路
- iOS私人通讯录
- No4 私人通讯录
- 小结:私人通讯录
- 小结:私人通讯录知识点
- 私人通讯录Demo - iOS
- ui进阶第三天,私人通讯录的创建(元宵节快乐)
- 练习:私人通讯录(界面和功能展示)
- 练习:私人通讯录功能实现(代码较多)
- Ninja Build
- 魅族MX2升级从Flyme 2.x升到Flyme 3.5.6再升级到Flyme 3.7A(Android4.4)固件链接
- 迈出从3K到1W的重要一步——掌握设计模式
- tomcat启动就定时循环执行的方法
- C++拾遗--构造函数(一)默认构造
- (三十七)从私人通讯录引出的细节I -Notification -Segue -HUD -延时
- Linux下解压rar文件
- Kafka安装与配置
- UISearchDisplayController 和 UISearchBar
- Linux时间子系统之六:高精度定时器(HRTIMER)的原理和实现
- C++拾遗--虚函数表
- 百度面试题
- ubuntu下SVN安装与使用
- springmvc简单实现权限控制