Проверка UITextField и отображение UIAlertView, если ошибка
Я хотел бы проверить UITextField и отобразить UIAlertView, если есть ошибка.
Ранее я использовал код ниже. Он отлично работает с 2 UITexfields, но со многими UITextfield это невозможно.
Любые советы, как отобразить UIAlertView для проверки моих полей UITex?
- (void)processFieldEntries {
NSString *usernameString = usernameField.text;
NSString *passwordString = passwordField.text;
NSString *firstNameString = firstNameField.text;
NSString *nameString = nameField.text;
NSString *cityString = cityField.text;
NSString *errorText = @"Enter";
NSString *usernameBlankText = @" a username";
NSString *passwordBlankText = @" a password";
NSString *prenomBlankText = @" a firstname";
NSString *nomBlankText = @" a name";
NSString *joinText = @", ";
BOOL textError = NO;
if (identifiantString.length == 0 || motDePasseString.length == 0 || prenomString.length == 0 || nomString.length == 0 || idPoubelle.length == 0) {
textError = YES;
if (usernameString.length == 0) {
errorText = [errorText stringByAppendingString:usernameBlankText];
}
if (usernameString.length == 0 || passwordString.length == 0) {
if (usernameString.length == 0) {
errorText = [errorText stringByAppendingString:joinText];
}
errorText = [errorText stringByAppendingString:passwordBlankText];
}
}
if (textError) {
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:errorText message:nil delegate:self cancelButtonTitle:nil otherButtonTitles:@"Ok", nil];
[alertView show];
return;
}
}
2 ответа
Я бы сделал что-то вроде этого:
- (void)processFieldEntries {
NSString *usernameString = usernameField.text;
NSString *passwordString = passwordField.text;
NSString *firstNameString = firstNameField.text;
NSString *nameString = nameField.text;
NSString *cityString = cityField.text;
NSMutableArray *errors = [NSMutableArray array];
if (usernameString.length == 0) {
[errors addObject:@"a username"];
}
if (passwordString.length == 0) {
[errors addObject:@"a password"];
}
if (firstNameString.length == 0) {
[errors addObject:@"a first name"];
}
if (nameString.length == 0) {
[errors addObject:@"a name"];
}
if (errors.count) {
NSString *message = [NSString stringWithFormat:@"Enter %@", [errors componentsJoinedByString:@", "]];
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Errors" message:message delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alertView show];
}
}
Конечно, это не очень хорошо масштабируется. Попробуйте создать массив текстовых полей и сообщений об ошибках. Затем вы можете перебирать массив вместо написания длинного списка if
заявления.
Вы также можете выполнить некоторую дополнительную проверку, когда пользователь вводит информацию, потому что, например, Имя не должно содержать цифр или других символов, кроме букв.
Хороший способ сделать это - реализовать протокол UITextFieldDelegate из класса View Controller.
Затем установите свойство тега для каждого объекта UITextField.
Протокол имеет этот полезный метод:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string;
который вызывается каждый раз, когда вы помещаете что-то в любое из текстовых полей.
Тогда вы можете проверить:
switch (textfield.tag)
{
case TEXT_FIELD_FOR_FIRST_NAME_TAG:
{
if (!validateFirstNameFunction) { /* Display some error */ }
break;
}
case TEXT_FIELD_FOR_LAST_NAME_TAG:
{
if (!validateLastNameFunction) { /* Display some error */ }
break;
}
// And so on...
}
Попробуйте разделить функциональность, которая сделает код чище и более читабельным.
Надеюсь, это принесет вам пользу:)