任何人都可以帮助我使用文本字段的以下代码应该仅在第一个正在执行的范围内更改字符吗?
#define ACCEPTABLE_CHARACTERS1 @" 1234567890"
- (BOOL)textField:(UITextField *)textField
shouldChangeCharactersInRange:(NSRange)range
replacementString:(NSString *)string
{
// first one................//
if (textField == self.phoneField)
{
NSCharacterSet *cs = [[NSCharacterSet characterSetWithCharactersInString:ACCEPTABLE_CHARACTERS1] invertedSet];
NSString *filtered = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""];
return [string isEqualToString:filtered];
}
// second one ........
if (textField == self.phoneField) {
if (((range.location == 3)) ||( range.location == 7)) {
_phoneField.text = [NSString stringWithFormat:@"%@-%@", textField.text, string];
return NO;
}
else if (range.length == 1 &&
(range.location == 4 || range.location == 8)) {
range.location--;
range.length = 2;
textField.text = [textField.text stringByReplacingCharactersInRange:range withString:@""];
return NO;
}
if (range.length+range.location > textField.text.length) {
return NO;
}
NSUInteger newLength = [textField.text length] + [string length] - range.length;
return newLength <=10;
}
}
最佳答案
因为您在第一个 if
block 中返回函数值,所以不会执行第二个 if
block ,return
语句立即结束执行当前函数的参数,返回它的参数作为函数调用的值。
要为您的 textField 格式化数字,请这样做
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
NSCharacterSet *cs = [[NSCharacterSet characterSetWithCharactersInString:@"1234567890"] invertedSet];
NSString *filtered = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""];
if (![string isEqualToString:filtered]) {
return NO;
}
if (((range.location == 3)) ||( range.location == 7))
{
textField.text = [NSString stringWithFormat:@"%@-%@", textField.text, string];
return NO;
}
else if (range.length == 1 &&
(range.location == 4 || range.location == 8)) {
range.location--;
range.length = 2;
textField.text = [textField.text stringByReplacingCharactersInRange:range withString:@""];
return NO;
}
if (range.length+range.location > textField.text.length) {
return NO;
}
NSUInteger newLength = [textField.text length] + [string length] - range.length;
return newLength <=12;
}
关于ios - 文本字段应该更改范围内的字符,只有第一个正在执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38789292/