TextField每次輸入就判斷使否要改變值,有此需求是因為我想限制使用者輸入某些字元,很簡單地想:每次輸入字元都去檢查。有協定方法可以直接來實做。
只要實作以下這個delegate即可做到效果。這個例子是判斷輸入的字數,也可以用來檢查每次輸入的值是否合法。
- 參數:string就是此時輸入的那個字元;textField就是此時正在運作的輸入框;range則是輸入字元的位置。
- 回傳值:YES就是可以改變輸入框的值,NO則相反。
/** Theme: Check the value of textField IDE: Xcode 5 Language: Objective C Date: 102/12/11 Author: HappyMan Blog: https://cg2010studio.wordpress.com/ */ - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string; { if ([string isEqualToString:@"\n"]) //按返回可以改變 { return YES; } NSString * toBeString = [textField.text stringByReplacingCharactersInRange:range withString:string]; //得到輸入框的內容 NSLog(@"toBeString: %@",toBeString); NSLog(@"string: %@",string); if (alertText == textField) //判斷是否為我們限定的輸入框 { if ([toBeString length] > 15) { //如果輸入框字元數大於15則跳出警告 textField.text = [toBeString substringToIndex:15]; UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil message:@"只能輸入15個字喔" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil]; [alert show]; return NO; } } return YES; }
以輸入「HappyMan」為範例,執行結果顯示:
toBeString: H
string: H
toBeString: Ha
string: a
toBeString: Hap
string: p
toBeString: Happ
string: p
toBeString: Happy
string: y
toBeString: HappyM
string: M
toBeString: HappyMa
string: a
toBeString: HappyMan
string: n
此時debug模式,列印range,其值如下:
Printing description of range:
(NSRange) range = location=7, length=0
廣告
發表留言