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
隨意留個言吧:)~