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)超出了文本字段数组的范围'
答案 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;
}
修改强>
我提供的代码假设您使用默认的警报视图样式文本字段,因此崩溃。
您不应addSubview
到UIAlertView
,因为警报视图的视图层次结构是私有的。用户在UIAlertView
添加的最新iOS7 will not display any subviews。所以我建议您不要这样做。
来自Apple docs,
UIAlertView类旨在按原样使用,不支持子类化。此类的视图层次结构是私有的,不得修改。
相反,请使用UIAlertViewStyle
。
以下是支持的样式,
typedef enum {
UIAlertViewStyleDefault = 0,
UIAlertViewStyleSecureTextInput,
UIAlertViewStylePlainTextInput,
UIAlertViewStyleLoginAndPasswordInput
} UIAlertViewStyle;
使用符合您要求的那个。要验证用户输入的输入,请使用我建议的上述方法。有关使用这些样式的警报视图,请参阅this simple guide/tutorial。
希望有所帮助!