alertview закрывается, когда появляется другое предупреждение

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"......" message:@"......" delegate:self cancelButtonTitle:@"Dismiss" otherButtonTitles:@"OK", nil];

[alert show];

Я показываю вид оповещения, чтобы добавить новую категорию, используя текстовое поле вида оповещения, когда пользователь нажимает кнопку оповещения "ОК", тогда я сначала проверяю, если пользователь ввел что-то или нет, если нет, то я показываю другое оповещение с некоторым сообщением, чтобы Пользователь знает, что текстовое поле является обязательным, но предыдущее предупреждение о добавлении новой категории исчезает.

Я хочу, чтобы это предупреждение оставалось на экране. И что же мне делать??

Это отчет о сбое и код::

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Add Vehicle Category" message:@"this gets covered!" delegate:self cancelButtonTitle:@"Dismiss" otherButtonTitles:@"OK", nil];
            alert.tag = 5;

txtAddVehicleCategory = [[UITextField alloc]initWithFrame:CGRectMake(12, 45, 260, 25)];

[txtAddVehicleCategory setBackgroundColor:[UIColor whiteColor]];

txtAddVehicleCategory.placeholder = @"Enter Vehicle Category";

txtAddVehicleCategory.contentVerticalAlignment =       UIControlContentVerticalAlignmentCenter;

[alert addSubview:txtAddVehicleCategory];


CGAffineTransform myTransform = CGAffineTransformMakeTranslation(0, -50);

[alert setTransform:myTransform];

[alert show];

"NSInvalidArgumentException", причина: "textFieldIndex (0) находится за пределами массива текстовых полей"

1 ответ

Решение

Если вы хотите реализовать некоторые правила для ввода текста в UIAlertView, вы должны отключить OK Кнопка просмотра предупреждений, пока пользователь не будет следовать правилам. Вы можете достичь этого с UIAlertViewDelegate методы. Заглянуть в alertViewShouldEnableFirstOtherButton:,

Вернуть NO от метода до соблюдения правила

- (BOOL)alertViewShouldEnableFirstOtherButton:(UIAlertView *)alertView
{
    // When return NO, OK button is disabled.
    // When return YES, rule is followed and OK button gets enabled.
    return ([[[alertView textFieldAtIndex:0] text] length]>0)?YES:NO;
}

РЕДАКТИРОВАТЬ

Код, который я предоставил, предполагал, что вы используете текстовое поле стиля представления предупреждений по умолчанию, поэтому произошел сбой.

Вы не должны addSubview в UIAlertView, потому что иерархия представления представления предупреждения является частной. Последняя версия iOS7 не будет отображать подпредставления, добавленные пользователем UIAlertView Поэтому я рекомендую вам не делать этого.

Из документов Apple,

Класс UIAlertView предназначен для использования как есть и не поддерживает создание подклассов. Иерархия представления для этого класса является закрытой и не должна быть изменена.

Вместо этого используйте UIAlertViewStyle,

Ниже приведены поддерживаемые стили,

typedef enum {
   UIAlertViewStyleDefault = 0,
   UIAlertViewStyleSecureTextInput,
   UIAlertViewStylePlainTextInput,
   UIAlertViewStyleLoginAndPasswordInput
} UIAlertViewStyle;

Используйте тот, который соответствует вашим требованиям. Для проверки ввода, введенного пользователем, используйте предложенный выше метод. Обратитесь к этому простому руководству / учебнику по использованию представления предупреждений с этими стилями.

Надеюсь, это поможет!

Другие вопросы по тегам