ios 监听TextField中内容变化

本篇文章只为帮助跟多的人。适合初学者。

在这里我介绍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

 

最后运行效果 和 打印——————————————————

 

时间: 2024-10-08 10:17:23

ios 监听TextField中内容变化的相关文章

Android基础入门教程——3.5 监听EditText的内容变化

Android基础入门教程--3.5 监听EditText的内容变化 标签(空格分隔): Android基础入门教程 本节引言: 在前面我们已经学过EditText控件了,本节来说下如何监听输入框的内容变化! 这个再实际开发中非常实用,另外,附带着说下如何实现EditText的密码可见 与不可见!好了,开始本节内容! 1.监听EditText的内容变化 由题可知,是基于监听的事件处理机制,好像前面的点击事件是OnClickListener,文本内容 变化的监听器则是:TextWatcher,我们

js 实时监听input中值变化

js 实时监听input中值变化 分类: Javascript2014-05-11 11:13 849人阅读 评论(0) 收藏 举报 [html] view plaincopyprint? <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>RunJS

iOS 监听textfield的输入(转)

1:首先 [objc] view plain copy print? [textField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged]; 2:其次 [objc] view plain copy print? -(void)textFieldDidChange :(UITextField *)theTextField{ NSLog( @"tex

js监听dom元素内容变化

$("#divid").bind('DOMNodeInserted', function(e) { alert('element now contains: ' + $(e.target).html()); });

监听UITextField输入内容的简单实现

在开发中经常会遇到需要用户输入的情况,比如:登录.注册: 以前的做法是如果用户没有输入内容,点击了登录按钮,弹出一个警告"内容为空", 更友好的做法是,在用户完成必须填写的内容后,登录按钮才可点击, 效果如下图: 这就需要监听textField中输入的内容,很容易想到去UITextField代理方法里寻找答案,这里有一个简单的方式来实现: <span style="font-size:14px;">- (void)viewDidLoad { _telTe

实时监听组件中路由的变化

实时监听组件中路由的变化,通过watch来进行监听,当路由发生变化时,重新赋值,重新执行从后台获取数据的操作 watch: { '$route' (to, from) { this.listQuery.keywords=this.$route.query.keywords this.searchByKeywords() } }, methods: { searchByKeywords() { this.$store.dispatch('updateLoading', true) fetchSea

vue中监听window.resize的变化

我只想说每个人遇到的bug真的不能一概而论,解决办法也会有不同.在vue中使用echarts的时候,会想要实现window.resize窗体变化大小的时候让图形大小跟着变化.实现的过程中各种bug,也真的让人有种想要发狂的感觉.但是还好,最后在不断的查资料和尝试当中.实现了想要的效果,仅供参考: 首先我这里实现的效果是切换echart图形,然后在window.resize过程中想要实现自适应窗口大小的变化. 这里的两个button分别是控制两个路由切换,也就是两个echart图形(柱状图和饼图)

iOS 实时监听textField的值的改变

考虑到代理方法 : textFieldDidEndEditing不能监听到textFiled实时的改变,想要实现实时监听 建议注册通知去监听textField的实时改变,直接上代码: [[NSNotificationCenterdefaultCenter]addObserver:selfselector:@selector(infoAction)name:UITextFieldTextDidChangeNotificationobject:nil]; - (void)infoAction { N

ios开发之--通过通知监听textfield的输入状态,判断按钮的状态

第一步: _rightBtn = [UIButton buttonWithType:UIButtonTypeCustom]; _rightBtn.frame = CGRectMake(kWidth - 50-5, 7, kWidth - _tf.frame.size.width-10, 45); [_rightBtn setBackgroundImage:[UIImage imageNamed:@"send_un"] forState:UIControlStateNormal]; [_