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 以上监听网络变化
大家好,大概有一个多月没有更新博客了,我是干什么去了呢?很明显,程序员当然要加班……这一次跟大家分享一下新项目的一些心得. 监听网络变化在开发中是经常用到的,例如我们断网有一些友好的提示,或者根据不同 ...
随机推荐
- 使用Flask构建一个Web应用
Flask是一个使用Python编写的轻量级Web应用框架. 一.安装Flask 以管理员身份,打开命令提示符窗口,输入下面命令 py -3 -m pip install flask 这个命令会连接到 ...
- Lnmp架构部署动态网站环境.2019-7-2-1.1
一.Mysql简介 Mysql数据库: 1.社区版 2.商业版 3.cluster集群 Mysql安装方式 1.编译安装 2.yum/rpm 3.二进制包,直接解压,无需编译 二.Mysql安装部署 ...
- MySQL MGR 集群从数据库显示RECOVRING
因为断电 或者 其他瞎折腾 导致: 从节点显示RECOVRING 查看错误日志显示: Slave SQL for channel 'group_replication_recovery': Error ...
- CME Futures & Options Order Book
http://algo-logic.com/futures-options-orderbook Algo-Logic Systems’ Futures & Options (F&O) ...
- python科学计算库-pandas
------------恢复内容开始------------ 1.基本概念 在数据分析工作中,Pandas 的使用频率是很高的, 一方面是因为 Pandas 提供的基础数据结构 DataFrame 与 ...
- 用scratch写了一个win98 界面模拟
scratch模拟win98 玩耍,放在网上了https://kada.163.com/project/4216461-3515165.htm
- CSP-J&S2019前颓废记
说了是颓废记,就是颓废记,因为真的很颓废...... 2018年12月 我看懂了<啊哈算法>(仅仅是看懂,并没有完全学会,只看得懂,却不会敲) 插曲:八上期末考试 我们老师阻挠我继续学OI ...
- C# 原子操作理解
C#内置提供的原子操作 Interlocked.Increment:以原子操作的形式递增指定变量的值并存储结果. Interlocked.Decrement:以原子操作的形式递减指定变量的值并存储结果 ...
- ES6中有关数组的一些新操作
1.Array.isArray() 用于确定传递的值是否是一个 Array. Array.isArray([1, 2, 3]); // true Array.isArray({foo: 123}); ...
- flask 第一章
1.安装flask 首先安装python的虚拟环境,每个环境之间的包并不会产生冲突 ,相当于一个单独的 小空间. 由于自己使用的是windows开发环境 所以安装虚拟包的命令如下 pip inst ...