本篇文章只为帮助跟多的人。适合初学者。
在这里我介绍3种监听UITextField的方法。并在最后写了一个小的demo 提供参考。
-------请不要纠结小编的命名方式规不规范,一切只为共同学习,共同进步。
@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-----");
}
 
 

demo
通知与代理一起使用:
如果有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;
 
    //循环遍历所有的控件
    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
 
最后运行效果 和 打印——————————————————
 

转载于:https://www.cnblogs.com/312294025myj/p/7308109.html

ios 监听TextField中内容变化相关推荐

  1. JavaScript 实时监听input 中值变化

    JavaScript 实时监听input 中值变化 在 <input> 标签中,添加属性 oninput ,oninput 事件在元素获得用户输入时发生. 当 <input> ...

  2. iOS 自定义搜索框实时监听输入的内容变化

    产品需求:点击搜索框,弹出键盘,当输入内容发生变化时,需要实时匹配与输入内容相关的产品,列表展示,让用户去选择:类似于淘宝和京东的搜索功能. 拿到需求的时候觉得这个应该挺简单的啊,苹果这么强大,这些功 ...

  3. 监听mysql表内容变化 使用canal_2 监听mysql表内容变化,使用canal

    mysql本身是支持主从的(master slave),原理就是master产生的binlog日志记录了所有的增删改语句,将binlog发送到slave节点进行执行即可完成数据的同步. canal是阿 ...

  4. ios 监听数组个数的变化_iOS 监听数组的变化

    这里用的是KVO的方式来实现的, 首先有一个 testArray 这个数组需要监听里面的数据变化 NSMutableArray *testArray; 然后给这个数组注册监听 testArray = ...

  5. ios 监听数组个数的变化_【iOS】KVO方式监听数组的变化动态刷新tableView

    写作本文来由:   iOS默认不支持对数组的KVO,因为普通方式监听的对象的地址的变化,而数组地址不变,而是里面的值发生了改变 整个过程需要三个步骤 (与普通监听一致) /* *第一步建立观察者及观察 ...

  6. 监听mysql表内容变化 使用canal,canal 监听同步指定数据库,所有表

    canal 监听同步指定数据库,所有表 canal 监听同步指定数据库,所有表 因为工作需求,需要用到数据库同步,又从网上找了一些发现都有些问题,所以自己弄好之后写一篇总结,及配置步骤吧 先将 MyS ...

  7. jq 检测元素内html变化,jq 监听 textarea 元素内容变化的方法

    在前台是可以限制 textarea 元素内输入内容的长度的,当然是用 jquery 代码实现起来是最简单,方便的,JQ脚本通过对 textarea 元素内容变化的检测来判断内容是否超出指定的长度. j ...

  8. js 实时监听input中值变化

    摘自:http://blog.csdn.net/spy19881201/article/details/25537225 示例: <!DOCTYPE html> <html> ...

  9. Vue.js开发记录--用watch监听对象中属性的变化

    监听对象中所有属性 存在对象obj,若想要监听其中所有的值的变化 watch: {obj: {handler (val) {// coding},deep: true}, } 监听对象中某个属性 如果 ...

最新文章

  1. mxnet 中的 DepthwiseConv2D API
  2. 指定模块打包命令_大前端进阶之Babel、模块化、webpack
  3. 计算机用word做贺卡,Word技巧:用word制作电子贺卡,你会吗?
  4. mysql 四舍五入
  5. redis之intset
  6. SpringBoot 自定义Kafka消息序列化和反序列化
  7. Selenium自动化测试-3.元素定位(3)
  8. 6. 区别值类型和引用类型。
  9. 【安装包】PhpStorm-2018.1
  10. linux 程序发包,软件测试常用linux发包命令
  11. linux之kubuntu挂载硬盘
  12. Linux Huge page
  13. 百度移动统计热力图和事件分析的坑
  14. 玩转Excel系列-index+match查找函数用法
  15. 你了解 JDK 8 Stream 数据流效率吗?千万级数据量性能如何?
  16. win10忘记密码_Win10系统设置u盘密码的操作过程
  17. 安全扫描工具-appscan
  18. 小程序 Serverless: 解放生产力,驱动研发效能提升 1
  19. C语言函数如何正确的输入和返回数组(一维和二维)
  20. <Android>布局中gravity和layout_gravity区别

热门文章

  1. C# 学习笔记(12)hex文件转bin文件小工具
  2. 【BLE】TLSR8258开发记录之12--手机扫描蓝牙显示中文
  3. CodeForces 845C Two TVs
  4. 第七周实践项目6 停车场模拟(栈和队列综合)
  5. [YTU]_2383 ( 矩形类定义【C++】)
  6. Mallet Java【Windows下配置】(解决Ant安装可能会失败的解决方案)
  7. k8s traefik ingress tls
  8. Python 爬虫系列:糗事百科最热段子
  9. 当final作用于变量、参数、方法和类时该如何处理
  10. Java基本语法——(用于日后复习)