当出现另一个警报时,alertview关闭

时间:2013-10-07 07:40:20

标签: ios delegates uialertview 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 个答案:

答案 0 :(得分:2)

如果要在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;
}

修改

我提供的代码假设您使用默认的警报视图样式文本字段,因此崩溃。

您不应addSubviewUIAlertView,因为警报视图的视图层次结构是私有的。用户在UIAlertView添加的最新iOS7 will not display any subviews。所以我建议您不要这样做。

来自Apple docs

  

UIAlertView类旨在按原样使用,不支持子类化。此类的视图层次结构是私有的,不得修改。

相反,请使用UIAlertViewStyle

以下是支持的样式,

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

使用符合您要求的那个。要验证用户输入的输入,请使用我建议的上述方法。有关使用这些样式的警报视图,请参阅this simple guide/tutorial

希望有所帮助!