текстовые поля должны изменять символы в диапазоне, только первый выполняется
Может ли кто-нибудь помочь мне с этим ниже кодом, используя текстовые поля, следует менять символы в диапазоне, только первый выполняется?
#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
блок не будет выполнять второй блок if
, оператор return
немедленно завершает выполнение текущей функции и возвращает свой аргумент как значение вызова функции.
Чтобы сделать число, отформатированное для вашего текстового поля, сделайте так:
-(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;
}
См. Вы используете два оператора if. но в конце первого оператора if вы используете return, поэтому элемент управления выйдет из этого цикла. Даже оба условия правильные. Простое объяснение.
- (void)viewDidLoad {
[super viewDidLoad];
if (1) {
NSLog(@"true");
return;
}
if (true) {
NSLog(@"true1");
return;
}
// Do any additional setup after loading the view, typically from a nib
}
Он будет печатать только true, а не true1, потому что элемент управления выйдет.
Еще в рубрике
- Вопросы
- Cocoa-touch
- текстовые поля должны изменять символы в диапазоне, только первый выполняется