Похож на Вас, взял код от Копия Greasemonkey\JavaScript к кнопке Clipboard или первоисточнику этого отрывка...
Этот код был для Механика, следовательно unsafeWindow. И я предполагаю, что синтаксическая ошибка в IE прибывает из const
ключевое слово, которое характерно для Firefox (замените его var
).
Проблема в том, что
string == @" "
неверен. Равенство для строк выполняется с помощью:
[string isEqualToString:@" "]
:).
Будет произведен поиск, чтобы увидеть, содержит ли ваша замещающая строка пробел, если он есть, то выдает сообщение об ошибке, если нет, то возвращает YES.
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
NSRange spaceRange = [string rangeOfString:@" "];
if (spaceRange.location != NSNotFound)
{
UIAlertView *error = [[UIAlertView alloc] initWithTitle:@"Error" message:@"You have entered wrong input" delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK", nil];
[error show];
return NO;
} else {
return YES;
}
}
string == @" "
Разве это не просто сравнение адресов каждой из строки
и @ ""
? Это не то сравнение, которое вы хотите проводить.
Также вы хотите запретить им вводить строку, которая представляет собой просто пробел? Если да, то вам нужно изменить это ==
на правильное сравнение строк, и все готово. Если нет и вы хотите запретить использование всех пробелов во входной строке, вам понадобится сопоставитель строк
Попробуйте это (установите это в своем - (BOOL) textField: (UITextField *) textField shouldChangeCharactersInRange: (NSRange) range replaceString: (NSString *) string):
NSArray *escapeChars = [NSArray arrayWithObjects:@" ", nil];
NSArray *replaceChars = [NSArray arrayWithObjects:@"",nil];
int len = [escapeChars count];
NSMutableString *temp = [[textField text] mutableCopy];
for(int i = 0; i < len; i++) {
[temp replaceOccurrencesOfString: [escapeChars objectAtIndex:i] withString:[replaceChars objectAtIndex:i] options:NSLiteralSearch range:NSMakeRange(0, [temp length])];
}
[textField setText:temp];
return TRUE;