iOS开发之--为UITextField监听数值变化的三种方法
项目中有个验证码输入直接验证跳转页面,用的RAC来监听textfield的输入值,如下:
- @weakify(self);
- [self.codeView.textField.rac_textSignal subscribeNext:^(NSString *value) {
- @strongify(self);
- self.value = value;
- //也可以直接在这里写想要执行的操作
- }];
- //当self.value的值变化时调用Block,这是用KVO的机制,RAC封装了KVO
- [RACObserve(self, self.value) subscribeNext:^(NSString *value) {
- NSLog(@"--%@",value);
- if (value.length == ) {
- [self.navigationController pushViewController:[SetPsdViewController new] animated:YES];
- return;
- }
- }];
打印如下:
明显走了两次,还没找到原因,有幸看到的大神可以帮忙解惑下!
替换方法如下:
1、直接监听
- #pragma mark - 直接添加监听方法
- -(void)addTargetMethod{
- [self.textField1 addTarget:self action:@selector(textField1TextChange:) forControlEvents:UIControlEventEditingChanged];
- }
- -(void)textField1TextChange:(UITextField *)textField{
- NSLog(@"textField1 - 输入框内容改变,当前内容为: %@",textField.text);
- }
2、NSNotificationCenter 添加监听方法
- #pragma mark - NSNotificationCenter 添加监听方法
- -(void)addNSNotificationCenter{
- [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textField2TextChange:) name:UITextFieldTextDidChangeNotification object:self.textField2];
- }
- -(void)textField2TextChange:(NSNotification *)noti{
- UITextField *currentTextField = (UITextField *)noti.object;
- NSLog(@"textField2 - 输入框内容改变,当前内容为: %@",currentTextField.text);
- }
- -(void)dealloc{
- [[NSNotificationCenter defaultCenter] removeObserver:self];
- }
3、代理方法--这种方法比较常用,但是代码写的比较多,如果TF多的话,看着可乱
- #pragma mark - 代理
- -(void)addDelegate{
- //实现 UITextFieldDelegate 协议
- self.textField4.delegate = self;
- }
- #pragma mark UITextFieldDelegate
- - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{
- return YES;
- }// return NO to disallow editing.
- - (void)textFieldDidBeginEditing:(UITextField *)textField{
- NSLog(@"textField4 - 开始编辑");
- }// became first responder
- - (BOOL)textFieldShouldEndEditing:(UITextField *)textField{
- return YES;
- }// return YES to allow editing to stop and to resign first responder status. NO to disallow the editing session to end
- - (void)textFieldDidEndEditing:(UITextField *)textField{
- NSLog(@"textField4 - 结束编辑");
- }// may be called if forced even if shouldEndEditing returns NO (e.g. view removed from window) or endEditing:YES called
- - (void)textFieldDidEndEditing:(UITextField *)textField reason:(UITextFieldDidEndEditingReason)reason NS_AVAILABLE_IOS(10_0){
- }// if implemented, called in place of textFieldDidEndEditing:
- - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
- NSLog(@"textField4 - 正在编辑, 当前输入框内容为: %@",textField.text);
- return YES;
- }// return NO to not change text
4、KVO监听数值变化
- -(void)addKVO{
- [self.textField3 addObserver:self forKeyPath:@"text" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:nil];
- self.textField3.text = @"";
- }
- -(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context{
- if ([keyPath isEqualToString:@"text"] && object == self.textField3) {
- NSLog(@"textField3 - 输入框内容改变,当前内容为: %@",self.textField3.text);
- }else{
- [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
- }
- }
- -(void)dealloc{
- [self.textField3 removeObserver:self forKeyPath:@"text" context:nil];
- }
上面这几种方法,亲测有效,仅做记录!
参考:https://blog.csdn.net/qxuewei/article/details/50727617
iOS开发之--为UITextField监听数值变化的三种方法的更多相关文章
- ios开发之--通过通知监听textfield的输入状态,判断按钮的状态
第一步: _rightBtn = [UIButton buttonWithType:UIButtonTypeCustom]; _rightBtn.frame = CGRectMake(kWidth - ...
- ios开发之--键盘的监听
监听键盘的弹出,让整个页面向上移动,比较简单,仅做记录使用: 代码如下: // 监听键盘 [[NSNotificationCenter defaultCenter] addObserver:self ...
- $scope.$watch()——监听数据变化
$scope.$watch(watchFn, watchAction, [deepWatch]):监听数据变化,三个参数 --watchFn:监听的对象,一个带有Angular 表达式或者函数的字符串 ...
- vue.js之过滤器,自定义指令,自定义键盘信息以及监听数据变化
一.监听数据变化 1.监听数据变化有两种,深度和浅度,形式如下: vm.$watch(name,fnCb); //浅度 vm.$watch(name,fnCb,{deep:true}); //深度监视 ...
- ios开发UI篇—UITextfield
概述 UITextField在界面中显示可编辑文本区域的对象. 您可以使用文本字段来使用屏幕键盘从用户收集基于文本的输入.键盘可以配置许多不同类型的输入,如纯文本,电子邮件,数字等等.文本字段使用目标 ...
- 对于单页应用中如何监听 URL 变化的思考
周末开发了一个在 GitHub 中给 repo 增加自定义备注的 chrome 扩展. 开发这个扩展的原因是我在 GitHub 中所 star 的项目实在太多了(截止目前 671 个),有的项目过个几 ...
- UI设计篇·入门篇·简单动画的实现,透明动画/旋转动画/移动动画/缩放动画,混合动画效果的实现,为动画设置监听事件,自定义动画的方法
基本的动画构成共有四种:透明动画/旋转动画/移动动画/缩放动画. 配置动画的方式有两种,一种是直接使用代码来配置动画效果,另一种是使用xml文档配置动画效果 相比而言,用xml文档写出来的动画效果,写 ...
- node.js监听文件变化
前言 随着前端技术的飞速发展,前端开发也从原始的刀耕火种,向着工程化效率化的方向发展.在各种开发框架之外,打包编译等技术也是层出不穷,开发体验也是越来越好.例如HMR,让我们的更新可以即时可见,告别了 ...
- Android 5.0 以上监听网络变化
大家好,大概有一个多月没有更新博客了,我是干什么去了呢?很明显,程序员当然要加班……这一次跟大家分享一下新项目的一些心得. 监听网络变化在开发中是经常用到的,例如我们断网有一些友好的提示,或者根据不同 ...
随机推荐
- 微服务:Eureka+Zuul+Ribbon+Feign+Hystrix构建微服务架构
原文地址:http://blog.csdn.net/qq_18675693/article/details/53282031 本案例将打架一个微服务框架,参考来源官方参考文档 微服务:是什么?网上有一 ...
- openssl rsa加密,解密以及X509证书的使用
Openssl的相关使用 生成证书 生成证书见:使用 openssl 生成证书 代码实现 Cert.h #ifndef _CERT_H #define _CERT_H ///header files ...
- appium---adb logcat 命令详解
我们在做app测试的过程中,肯定会遇到需要抓取日志问题,这几天安静也遇到了此问题,后台日志生成的太多了,保存本地了吧,设备多没有这么USB,通过wifi连接又太麻烦,你说这怎么是好?不要着急,我们往下 ...
- JAVA框架中XML文件
其实在JAVA开发中servlet配置,映射注入配置等等都可以用xml来配置 在此处的department是实体类的名字,而不是对应的数据库表的名字 数据库表的字段名=#{实体类属性名} 逆向工程生成 ...
- 2. Vue - 初始
一.vue简单介绍 1. vue定义 vue是一套用于构建用户界面的渐进式框架.vue被设计为可自底向上逐层应用,vue的核心只关注视图层:vue的特点是数据驱动视图,可直接修改数据,不用再手动编 ...
- word最近文档清除
- (day51)三、ORM、路由层、版本差异、流程图
目录 一.ORM关系建立 (一)ForeignKey(一对多) (二)ManyToManyField(多对多) (三)OneToOneField(一对一) 二.django请求生命周期流程图 三.ur ...
- Django cache (缓存)
五种配置 1.开发调试 # 此为开始调试用,实际内部不做任何操作 # 配置: CACHES = { 'default': { 'BACKEND': 'django.core.cache.backend ...
- python3.8.0 Django 开发后端接口api 部署到 Linux Centos7上
经历了两天的时候终于把本地使用python3 django开发的接口API部署到服务器上了,还是记录一下,以免之后忘记,哈哈 注意一点,就是,centos7是基于python2的,我这边默认的是pyt ...
- ant design pro解决初始加载,有顺序的请求/请求顺序报错问题/登录后再加载其他数据/异步的顺序问题/偷跑
方法是:如在Authorized.jsx中解决,当未登录成功(包括登录失败和登录验证中),就显示loading,否则继续 加载渲染children 一个三目运算或者if分支就可以解决,但是要写到最先加 ...