如圖所示:
在開發(fā)中辞槐,一般都要監(jiān)聽賬號(hào)對(duì)應(yīng)的輸入文本框和密碼對(duì)應(yīng)的文本框同時(shí)有值,才能讓登錄按鈕可以點(diǎn)擊梨树,這個(gè)時(shí)候就有兩種辦法了销斟,一種是通過UITextFieldDelegate方法監(jiān)聽,一種是通過addTarget方法監(jiān)聽测暗,可能大多數(shù)人有和筆者相同的疑問央串,是不是都可以呢?那么筆者通過實(shí)驗(yàn)來說明情況:
首先通過UITextFieldDelegate方式監(jiān)聽
//當(dāng)賬號(hào)與密碼同時(shí)有值,登錄按鈕才能夠點(diǎn)擊
self.accountTextF.delegate = self;
self.pwdTextF.delegate = self;
點(diǎn)擊文本框的時(shí)候會(huì)自動(dòng)調(diào)用該方法
//是否允許改變文字.
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSLog(@"accountTextF==%@",self.accountTextF.text);
NSLog(@"----%@",string);
if (self.accountTextF.text.length && self.pwdTextF.text.length) {
self.loginBtn.enabled = YES;
}else {
self.loginBtn.enabled = NO;
}
return YES;
}
- 上面筆者把賬號(hào)對(duì)應(yīng)的屬性里面保存的值self.accountTextF.text碗啄,和string的值打印了一下质和,如圖所示,
細(xì)心的讀者可能已經(jīng)發(fā)現(xiàn)了,值不一樣稚字,不同步饲宿,self.accountTextF.text的值比string的值慢了一拍,這樣就不行了胆描,為什么因?yàn)槿绻彝ㄟ^每個(gè)文本框的長度去判斷有沒有值的時(shí)候瘫想,比如我就在賬號(hào)文本框里面輸入了一個(gè)字符
a
,按道理昌讲,我的賬號(hào)文本框的長度應(yīng)該是1国夜,可是剛剛通過打印,發(fā)現(xiàn)長度應(yīng)該是0短绸,那么在里面進(jìn)行一些邏輯業(yè)務(wù)的判斷是錯(cuò)誤的车吹,好了筹裕,接下來看addTarget方式通過addTarget方式監(jiān)聽
[self.accountTextF addTarget:self action:@selector(textChange) forControlEvents:UIControlEventEditingChanged];
[self.pwdTextF addTarget:self action:@selector(textChange) forControlEvents:UIControlEventEditingChanged];
//當(dāng)文本內(nèi)容改變時(shí)調(diào)用
- (void)textChange
{
NSLog(@"accountTextF==%@",self.accountTextF.text);
//當(dāng)賬號(hào)與密碼同時(shí)有值,登錄按鈕才能夠點(diǎn)擊
self.loginBtn.enabled = self.accountTextF.text.length && self.pwdTextF.text.length;
}
效果圖片:
看到?jīng)]有,賬號(hào)文本框中輸入一個(gè)字符
a,控制臺(tái)就打印一個(gè)字符
a礼搁,兩者保持同步饶碘,所以在里面進(jìn)行一些邏輯業(yè)務(wù)的判斷,沒有問題馒吴,所以最終結(jié)論是,只能用addTarget方式瑟曲,不能用UITextFieldDelegate方式饮戳,謝謝大家