@property (weak, nonatomic) IBOutlet UITextField *UserID;
@property (weak, nonatomic) IBOutlet UITextField *Password;
@property (weak, nonatomic) IBOutlet UIButton *LoginBut;
监听文本框中的内容的几种方式:(用于登录账号-用于搜索)
1.代理 (只能监听设置了代理的文本框没有设置代理的文本框不能进行监听)
<UITextFieldDelegate>
_UserID.delegate=self(设置代理)
//是否可以编辑yes可以 no不可以
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{
return YES;
}
//开始编辑的时候调用
- (void)textFieldDidBeginEditing:(UITextField *)textField{
NSLog(@"开始编辑");
}
//是否允许结束编辑(当用户结束一个文本框的时候,首先会调用这个)
//如果是NO 意思就是,这个文本框回一直处于编辑状态(也叫第一响应者),就算你再点击其他文本框,是没有任何效果的
- (BOOL)textFieldShouldEndEditing:(UITextField *)textField{
return YES;
}
//结束编辑的时候调用
- (void)textFieldDidEndEditing:(UITextField *)textField{
NSLog(@"结束编辑");
}
//是否允许用户输入文件
//用户每次输入一个字符的时候就会调用一次。然后判断是非显示在文本框里
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
//打印
NSString *text=[NSString stringWithFormat:@"%@%@",textField.text,string];
NSLog(@"------%@",text);
return YES;
}
//是否允许清除当前文本框中所输入的内容
- (BOOL)textFieldShouldClear:(UITextField *)textField{
return YES;
}
2.通知 (可以监听所有的文本框)
/*
UITextFieldTextDidChangeNotification //文本框改变的通知
object:_UserID 表示_UserID 这一个文本框
object:nil 表示 所有的文本框
*/
[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(textChange) name:UITextFieldTextDidChangeNotification object:nil];
-(void)textChange{
NSLog(@“-----Change-----");
}
//当前对像要销毁的时候,创建的通知要进行移除:(否则可能报错,坏内存访问)
-(void)dealloc{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
3.监听者(addTarget)()
/*
Events(事件):当我产生什么事件的时候会掉用这个方法
UIControlEventEditingChanged : 当文本框进行编辑
*/
[_UserID addTarget:self action:@selector(textChange) forControlEvents:UIControlEventEditingChanged];
[_Password addTarget:self action:@selector(textChange) forControlEvents:UIControlEventEditingChanged];
}
//我把2个文本框的监听触发方法都设置为textChange 目的是判断登录按钮是否可以点击
//只有2个文本框都有值才可以进行点击(这里根据自己的需要)
-(void)textChange{
if(_UserID.text.length && _Password.text.length){
_LoginBut.enabled=YES;
}else{
_LoginBut.enabled=NO;
}
//这个判断可以优化为一行:
_LoginBut.enabled=_UserID.text.length && _Password.text.length;
NSLog(@"gaibia-----");
}
通知与代理一起使用:
如果有5个文本框或者跟多同时监听,我想直接打印出处于编辑的那个文本框(第一响应者)是哪一个,内容是什么:
代码:
这里不需要拖线(你的storyboard 要与你的viewcontroller相关联)
#import "ViewController.h"
@interface ViewController () <UITextFieldDelegate>
//@property (nonatomic, strong) NSArray *TextFieldAll;//存储所有的textField
@property (nonatomic, strong) UITextField *newtext;//获取处于编辑状态的UITextField
@end
@implementation ViewController
- (void)viewDidLoad {
//创建一个数组存储textfield
NSMutableArray *fieldsM = [NSMutableArray array];
//没有拖线
//这句代码是获取view上的所有控件,包括label,textfield;
NSArray *childArray=self.view.subviews;
int TAG=0;//给每一个textfield设置一个tag
//循环遍历所有的控件
for (UIView *child in childArray) {
//找出所有的TextFieldAll
if([child isKindOfClass:[UITextField class]]){
//类型转换
UITextField *textField=(UITextField *)child;
//设置代理
textField.delegate=self;
// [fieldsM addObject:textField];
}
}
// _TextFieldAll=fieldsM;
//创建通知:监听每一个TextField
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textChange) name:UITextFieldTextDidChangeNotification object:nil];
}
-(void)textChange{
//打印处于编辑状态的TextField 和 tag
NSLog(@"%@-%ld",_newtext.text,(long)_newtext.tag);
}
- (void)textFieldDidBeginEditing:(UITextField *)textField{
_newtext=[[UITextField alloc]init];
_newtext=textField;
}
@end
最后运行效果 和 打印——————————————————
![]()
- iOS 监听textfield的输入(转)
1:首先 [textField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEvent ...
- ios开发之--通过通知监听textfield的输入状态,判断按钮的状态
第一步: _rightBtn = [UIButton buttonWithType:UIButtonTypeCustom]; _rightBtn.frame = CGRectMake(kWidth - ...
- 实时监听input输入内容的N种方法
现在有一个需求,需要我们实时监听input输入框中的内容,从而带来更好的用户体验,而不是等我们全部输入完毕才告诉我们格式不对首先我们创建一个input输入框 <form name='loginF ...
- Fragment-如何监听fragment中的回退事件与怎样保存fragment状态
一.如何监听Fragment中的回退事件 1.问题阐述 在Activity中监听回退事件是件非常容易的事,因为直接重写onBackPressed()函数就好了,但当大家想要监听Fragment中的回退 ...
- Spring Boot 监听 Activemq 中的特定 topic ,并将数据通过 RabbitMq 发布出去
1.Spring Boot 和 ActiveMQ .RabbitMQ 简介 最近因为公司的项目需要用到 Spring Boot , 所以自学了一下, 发现它与 Spring 相比,最大的优点就是减少了 ...
- js 实时监听input中值变化
注意:用到了jquery需要引入jquery.min.js. 需求: 1.每个地方需要分别打分,总分为100; 2.第一个打分总分为40; 3.第二个打分总分为60. 注意:需要判断null.&quo ...
- 实时输出TextField中内容
要想实时输出TextField中内容,要找到textField内容发现改变就会调用的函数,即 - (BOOL)textField:(UITextField *)textField shouldChan ...
- oracle11g的监听配置文件中的program和env两个配置,必须干掉,客户端才能正常连接
oracle11g的监听配置文件中的program和env两个配置,必须干掉,客户端才能正常连接 oracle11g的监听配置文件中的program和env两个配置,必须干掉,客户端才能正常连接 or ...
- js监听文本框内容变化
js监听文本框内容变化 原理很简单,就是在外部先声明一个用来记录input值的变量,然后每0.1秒比较这个值与input的值,如果发生改变,则运行自己的代码,同时改变变量.从而实现对input值改变的 ...
随机推荐
- php中的冒泡排序算法
<?php //php中的冒泡排序算法 //从大到小的排序方式 ,$arr[$j]>$arr[$j+1](这里换成了从小到大的排序方式) $arr=array(); $arr=array( ...
- Administrator账户密码忘了怎么办
WIN7的Administrator账户密码忘了怎么办 1.准备一个带有winpe系统的系统光盘或者U盘 2.启动电脑,按F12选择U盘或者光盘启动,进入winpe操作系统 3.找到c:\wind ...
- 编写运行最简单的java程序——使用记事本编写java程序
第一个java程序--使用记事本编辑 经过上篇文章的java环境搭建成功的小伙伴们可以在自己的计算机上编写属于自己的java程序了yo~ 还没有搭建环境变量的小伙伴请转移到上一篇的随笔中去完成搭建. ...
- Object-C知识点 (四) 性能优化
#pragma mark - 性能优化 1. 行高一定要缓存 缓存行高是解决性能优化的最佳途径(除非刷新频率已经很高了,否则一定要缓存)2. 尽量减少计算,所有需要素材提前计算好3. 控件不要设置圆角 ...
- ASP.NET Core Web API 最小化项目
ASP.NET Core中默认的ASP.NET Core 模板中有Web API 模板可以创建Web API项目. 有时,只需要创建一个API,不需要关心Razor,本地化或XML序列化.通过删除无用 ...
- intellij idea 常用快捷键让你事半功倍
为什么谈这个 工欲善其事必先利其器,键盘流是必须的,快捷键首当其冲,请收下!!! 常用快捷键列表 Live Templates 自定义代码模板 取消屏幕的翻转,可以使用ctrl+alt+左右,进行代码 ...
- Python数据分析之路(一)查询和统计
0. 如何入门数据分析 关注沙漠之鹰的同学一定看过沙漠君写得很多篇数据分析文章,比如分析房价,车价,预测机动车摇号这些话题.其实文章中所有的分析都使用了Python和它非常强大的数据分析库Pandas ...
- Windows 10 上,Edge 浏览器不支持插件,因此将不运行 Java
在 Windows 10 上,Edge 浏览器不支持插件,因此将不运行 Java.微软想干嘛?
- Opencv探索之路(十九):读写xml和yml文件
有时候我们处理完图像后需要保存一下数据到文件上,以供下一步的处理.一个比较广泛的需求场景就是:我们对一幅图像进行特征提取之后,需要把特征点信息保存到文件上,以供后面的机器学习分类操作.那么如果遇到这样 ...
- oracle 小测
01)oracle10i,oracle11g,oracle12c,其它i,g,c什么意思? i(Internet)互联网 g(grid)网格 c(cloud) 云02)sqlplus是什么意思? 是o ...