ios 监听TextField中内容变化
生活随笔
收集整理的這篇文章主要介紹了
ios 监听TextField中内容变化
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
本篇文章只為幫助跟多的人。適合初學(xué)者。 在這里我介紹3種監(jiān)聽(tīng)UITextField的方法。并在最后寫(xiě)了一個(gè)小的demo 提供參考。
-------請(qǐng)不要糾結(jié)小編的命名方式規(guī)不規(guī)范,一切只為共同學(xué)習(xí),共同進(jìn)步。 @property (weak, nonatomic) IBOutlet UITextField *UserID; @property (weak, nonatomic) IBOutlet UITextField *Password; @property (weak, nonatomic) IBOutlet UIButton *LoginBut; ?監(jiān)聽(tīng)文本框中的內(nèi)容的幾種方式:(用于登錄賬號(hào)-用于搜索) ?1.代理 (只能監(jiān)聽(tīng)設(shè)置了代理的文本框沒(méi)有設(shè)置代理的文本框不能進(jìn)行監(jiān)聽(tīng)) ? ? ? ??? ? ? ? ?? ? ? ? ?? ? ? ? ?? ? ? ? ?? ? ? ? ?? ? ? ? ?? ? ? ? ?? ? ? ? ?? ? ? ? ?? ? ? ? ?? ? ? ? ??? <UITextFieldDelegate> ? ?_UserID.delegate=self(設(shè)置代理) ? ? //是否可以編輯yes可以 no不可以 - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{ ??? return YES; } //開(kāi)始編輯的時(shí)候調(diào)用 - (void)textFieldDidBeginEditing:(UITextField *)textField{ ??? NSLog(@"開(kāi)始編輯"); } ? //是否允許結(jié)束編輯(當(dāng)用戶(hù)結(jié)束一個(gè)文本框的時(shí)候,首先會(huì)調(diào)用這個(gè)) //如果是NO 意思就是,這個(gè)文本框回一直處于編輯狀態(tài)(也叫第一響應(yīng)者),就算你再點(diǎn)擊其他文本框,是沒(méi)有任何效果的 - (BOOL)textFieldShouldEndEditing:(UITextField *)textField{ ??? return YES; } //結(jié)束編輯的時(shí)候調(diào)用 - (void)textFieldDidEndEditing:(UITextField *)textField{ ??? NSLog(@"結(jié)束編輯"); } ? //是否允許用戶(hù)輸入文件 //用戶(hù)每次輸入一個(gè)字符的時(shí)候就會(huì)調(diào)用一次。然后判斷是非顯示在文本框里 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{ ?? //打印 ??? NSString *text=[NSString stringWithFormat:@"%@%@",textField.text,string]; ??? NSLog(@"------%@",text); ??? return YES; } //是否允許清除當(dāng)前文本框中所輸入的內(nèi)容 - (BOOL)textFieldShouldClear:(UITextField *)textField{ ??? return YES; } ? ?2.通知? (可以監(jiān)聽(tīng)所有的文本框) ? ? ? ?? ? ? ? ?? ? ? ? ?? ? ? ? ?? ? ? ? ?? ? ? ? ?? ? ? ? ?? ? ? ? ?? ? ? ? ?? ? ? ? ?? ? ? ? ?? ? ? ? ??? ? ?/* ???? UITextFieldTextDidChangeNotification //文本框改變的通知 ???? object:_UserID 表示_UserID 這一個(gè)文本框 ???? object:nil ??? 表示 所有的文本框 ???? */ [NSNotificationCenter defaultCenter]addObserver:self selector:@selector(textChange) name:UITextFieldTextDidChangeNotification object:nil]; ? -(void)textChange{ ??? NSLog(@“-----Change-----"); } ? //當(dāng)前對(duì)像要銷(xiāo)毀的時(shí)候,創(chuàng)建的通知要進(jìn)行移除:(否則可能報(bào)錯(cuò),壞內(nèi)存訪(fǎng)問(wèn)) -(void)dealloc{ ??? [[NSNotificationCenter defaultCenter] removeObserver:self]; } ? ?3.監(jiān)聽(tīng)者(addTarget)() ? ? ? ?? ? ? ? ?? ? ? ? ?? ? ? ? ?? ? ? ? ?? ? ? ? ?? ? ? ? ?? ? ? ? ?? ? ? ? ?? ? ? ? ?? ? ? ? ?? ? ? ? ??? ? /* ???? Events(事件):當(dāng)我產(chǎn)生什么事件的時(shí)候會(huì)掉用這個(gè)方法 ???? UIControlEventEditingChanged : 當(dāng)文本框進(jìn)行編輯 ???? */ ? ??? [_UserID addTarget:self action:@selector(textChange) forControlEvents:UIControlEventEditingChanged]; ??? ??? [_Password addTarget:self action:@selector(textChange) forControlEvents:UIControlEventEditingChanged]; ?? } //我把2個(gè)文本框的監(jiān)聽(tīng)觸發(fā)方法都設(shè)置為textChange 目的是判斷登錄按鈕是否可以點(diǎn)擊 //只有2個(gè)文本框都有值才可以進(jìn)行點(diǎn)擊(這里根據(jù)自己的需要) -(void)textChange{ ??? if(_UserID.text.length && _Password.text.length){ ??????? _LoginBut.enabled=YES; ??? }else{ ???? _LoginBut.enabled=NO; ??? } //這個(gè)判斷可以?xún)?yōu)化為一行: ? ??_LoginBut.enabled=_UserID.text.length && _Password.text.length; ? ??? NSLog(@"gaibia-----"); } ? ?
demo 通知與代理一起使用: 如果有5個(gè)文本框或者跟多同時(shí)監(jiān)聽(tīng),我想直接打印出處于編輯的那個(gè)文本框(第一響應(yīng)者)是哪一個(gè),內(nèi)容是什么: 代碼: ?
-------請(qǐng)不要糾結(jié)小編的命名方式規(guī)不規(guī)范,一切只為共同學(xué)習(xí),共同進(jìn)步。 @property (weak, nonatomic) IBOutlet UITextField *UserID; @property (weak, nonatomic) IBOutlet UITextField *Password; @property (weak, nonatomic) IBOutlet UIButton *LoginBut; ?監(jiān)聽(tīng)文本框中的內(nèi)容的幾種方式:(用于登錄賬號(hào)-用于搜索) ?1.代理 (只能監(jiān)聽(tīng)設(shè)置了代理的文本框沒(méi)有設(shè)置代理的文本框不能進(jìn)行監(jiān)聽(tīng)) ? ? ? ??? ? ? ? ?? ? ? ? ?? ? ? ? ?? ? ? ? ?? ? ? ? ?? ? ? ? ?? ? ? ? ?? ? ? ? ?? ? ? ? ?? ? ? ? ?? ? ? ? ??? <UITextFieldDelegate> ? ?_UserID.delegate=self(設(shè)置代理) ? ? //是否可以編輯yes可以 no不可以 - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{ ??? return YES; } //開(kāi)始編輯的時(shí)候調(diào)用 - (void)textFieldDidBeginEditing:(UITextField *)textField{ ??? NSLog(@"開(kāi)始編輯"); } ? //是否允許結(jié)束編輯(當(dāng)用戶(hù)結(jié)束一個(gè)文本框的時(shí)候,首先會(huì)調(diào)用這個(gè)) //如果是NO 意思就是,這個(gè)文本框回一直處于編輯狀態(tài)(也叫第一響應(yīng)者),就算你再點(diǎn)擊其他文本框,是沒(méi)有任何效果的 - (BOOL)textFieldShouldEndEditing:(UITextField *)textField{ ??? return YES; } //結(jié)束編輯的時(shí)候調(diào)用 - (void)textFieldDidEndEditing:(UITextField *)textField{ ??? NSLog(@"結(jié)束編輯"); } ? //是否允許用戶(hù)輸入文件 //用戶(hù)每次輸入一個(gè)字符的時(shí)候就會(huì)調(diào)用一次。然后判斷是非顯示在文本框里 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{ ?? //打印 ??? NSString *text=[NSString stringWithFormat:@"%@%@",textField.text,string]; ??? NSLog(@"------%@",text); ??? return YES; } //是否允許清除當(dāng)前文本框中所輸入的內(nèi)容 - (BOOL)textFieldShouldClear:(UITextField *)textField{ ??? return YES; } ? ?2.通知? (可以監(jiān)聽(tīng)所有的文本框) ? ? ? ?? ? ? ? ?? ? ? ? ?? ? ? ? ?? ? ? ? ?? ? ? ? ?? ? ? ? ?? ? ? ? ?? ? ? ? ?? ? ? ? ?? ? ? ? ?? ? ? ? ??? ? ?/* ???? UITextFieldTextDidChangeNotification //文本框改變的通知 ???? object:_UserID 表示_UserID 這一個(gè)文本框 ???? object:nil ??? 表示 所有的文本框 ???? */ [NSNotificationCenter defaultCenter]addObserver:self selector:@selector(textChange) name:UITextFieldTextDidChangeNotification object:nil]; ? -(void)textChange{ ??? NSLog(@“-----Change-----"); } ? //當(dāng)前對(duì)像要銷(xiāo)毀的時(shí)候,創(chuàng)建的通知要進(jìn)行移除:(否則可能報(bào)錯(cuò),壞內(nèi)存訪(fǎng)問(wèn)) -(void)dealloc{ ??? [[NSNotificationCenter defaultCenter] removeObserver:self]; } ? ?3.監(jiān)聽(tīng)者(addTarget)() ? ? ? ?? ? ? ? ?? ? ? ? ?? ? ? ? ?? ? ? ? ?? ? ? ? ?? ? ? ? ?? ? ? ? ?? ? ? ? ?? ? ? ? ?? ? ? ? ?? ? ? ? ??? ? /* ???? Events(事件):當(dāng)我產(chǎn)生什么事件的時(shí)候會(huì)掉用這個(gè)方法 ???? UIControlEventEditingChanged : 當(dāng)文本框進(jìn)行編輯 ???? */ ? ??? [_UserID addTarget:self action:@selector(textChange) forControlEvents:UIControlEventEditingChanged]; ??? ??? [_Password addTarget:self action:@selector(textChange) forControlEvents:UIControlEventEditingChanged]; ?? } //我把2個(gè)文本框的監(jiān)聽(tīng)觸發(fā)方法都設(shè)置為textChange 目的是判斷登錄按鈕是否可以點(diǎn)擊 //只有2個(gè)文本框都有值才可以進(jìn)行點(diǎn)擊(這里根據(jù)自己的需要) -(void)textChange{ ??? if(_UserID.text.length && _Password.text.length){ ??????? _LoginBut.enabled=YES; ??? }else{ ???? _LoginBut.enabled=NO; ??? } //這個(gè)判斷可以?xún)?yōu)化為一行: ? ??_LoginBut.enabled=_UserID.text.length && _Password.text.length; ? ??? NSLog(@"gaibia-----"); } ? ?
demo 通知與代理一起使用: 如果有5個(gè)文本框或者跟多同時(shí)監(jiān)聽(tīng),我想直接打印出處于編輯的那個(gè)文本框(第一響應(yīng)者)是哪一個(gè),內(nèi)容是什么: 代碼: ?
?
?
? 這里不需要拖線(xiàn)(你的storyboard 要與你的viewcontroller相關(guān)聯(lián)) ? #import "ViewController.h" ? @interface ViewController () <UITextFieldDelegate> ? //@property (nonatomic, strong) NSArray *TextFieldAll;//存儲(chǔ)所有的textField ? @property (nonatomic, strong) UITextField *newtext;//獲取處于編輯狀態(tài)的UITextField @end ? @implementation ViewController ? ? ? ? - (void)viewDidLoad { ??? //創(chuàng)建一個(gè)數(shù)組存儲(chǔ)textfield ??? NSMutableArray *fieldsM = [NSMutableArray array]; ??? ??? //沒(méi)有拖線(xiàn) ??? //這句代碼是獲取view上的所有控件,包括label,textfield; ??? NSArray *childArray=self.view.subviews; ? ??? //循環(huán)遍歷所有的控件 ??? for (UIView *child in childArray) { ??????? ??????? //找出所有的TextFieldAll ??????? if([child isKindOfClass:[UITextField class]]){ ??????????? //類(lèi)型轉(zhuǎn)換 ??????????? UITextField *textField=(UITextField *)child; ? ??????????? //設(shè)置代理 ??????????? textField.delegate=self; ??????????? ????????? //? [fieldsM addObject:textField]; ? ??????? } ??? } ?// ? _TextFieldAll=fieldsM; ??? ??? //創(chuàng)建通知:監(jiān)聽(tīng)每一個(gè)TextField ??? [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textChange) name:UITextFieldTextDidChangeNotification object:nil]; } ? -(void)textChange{ ??? //打印處于編輯狀態(tài)的TextField 和 tag ??? NSLog(@"%@-%ld",_newtext.text,(long)_newtext.tag); ? } ? - (void)textFieldDidBeginEditing:(UITextField *)textField{ ??? ??? _newtext=[[UITextField alloc]init]; ??? _newtext=textField; ??? } ? @end ? 最后運(yùn)行效果 和 打印—————————————————— ??
轉(zhuǎn)載于:https://www.cnblogs.com/312294025myj/p/7308109.html
總結(jié)
以上是生活随笔為你收集整理的ios 监听TextField中内容变化的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 微信iOS版更新:可批量管理不常联系的朋
- 下一篇: Hibernate -- Dao层 --