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;
Используйте тот, который соответствует вашим требованиям. Для проверки ввода, введенного пользователем, используйте предложенный выше метод. Обратитесь к этому простому руководству / учебнику по использованию представления предупреждений с этими стилями.
Надеюсь, это поможет!