@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值改变的 ...
随机推荐
- LinCode 刷题 之二叉树最小深度
http://www.lintcode.com/zh-cn/problem/minimum-depth-of-binary-tree/ 题目描述信息 /** * Definition of Tree ...
- bc计算A股上市新股依次涨停股价
几年的股市可谓惨不忍睹,不提也罢.唯有打新中签的时候,心里稍微有那么一点点的补偿,于是内心就YY可以30板吗,可以40板吗.于是就写了个连板的bc程序,每次中签的时候就运行一下,然后尽情的YY,然而每 ...
- DataTable多线程操作报错情况
最近在写一个http接口时用了DataTable这个强大的利器,接口用浏览器跑起来没任何问题.当时也没考虑并发问题,后来用一个压力测试工具做大并发测试,1000+/s次速度测试.发现程序报错了.程序报 ...
- 深入浅出TCP/IP协议栈
TCP/IP协议栈是一系列网络协议的总和,是构成网络通信的核心骨架,它定义了电子设备如何连入因特网,以及数据如何在它们之间进行传输.TCP/IP协议采用4层结构,分别是应用层.传输层.网络层和链路层, ...
- java的logcat的简单使用
android.util.Log常用的方法有以下5个:Log.v() Log.d() Log.i() Log.w() 以及 Log.e() .根据首字母对应VERBOSE,DEBUG,INFO, WA ...
- maven编译常见错误解决方法整理
程序包com.sun.xml.internal.ws.spi不存在 当maven项目里面有用到JDK内部的一些类,接口(如:com.sun.xml.internal.ws.spi.ProviderIm ...
- vue和mvvm的一些小区别
Vue.js 和 MVVM 小细节 MVVM 是Model-View-ViewModel 的缩写,它是一种基于前端开发的架构模式,其核心是提供对View 和 ViewModel 的双向数据绑定,这 ...
- Java的数据类型和参数传递
Java提供的数据类型主要分为两大类:基本数据类型和引用数据类型. Java中的基本数据类型 名称 大小 取值范围 byte型 (字节) 8bit -128-127 (-2^7到2^7-1) sho ...
- View学习(一)-DecorView,measureSpec与LayoutParams
这段时间在学习android中view的工作原理与自定义View的相关内容,所以未来这这几篇博客都总结一下相关的知识吧. 首先我们要了解和熟悉两个概念,DecorView 与 MeasureSpec. ...
- Chrome浏览器扩展开发系列之十五:跨域访问的XMLHttpRequest对象
XMLHttpRequest对象是W3C的标准API,用于访问服务器资源.XMLHttpRequest对象支持多种文本格式,如XML和JSON等.XMLHttpRequest对象可以通过HTTP和HT ...