当另一个警报出现时,警报视图关闭
Posted
技术标签:
【中文标题】当另一个警报出现时,警报视图关闭【英文标题】:alertview closes when another alert appears 【发布时间】:2013-10-07 07:40:20 【问题描述】: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) 超出了文本字段数组的范围'
【问题讨论】:
请注意,从 ios7 开始,此代码将不起作用。所以如果你打算提交到 AppStore,我会寻找更好的解决方案。 【参考方案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
,因为警报视图的视图层次结构是私有的。用户在UIAlertView
上添加的最新iOS7 will not display any subviews。所以我建议你不要这样做。
来自Apple docs,
UIAlertView 类旨在按原样使用,不支持子类化。此类的视图层次结构是私有的,不得修改。
改为使用UIAlertViewStyle
。
以下是支持的样式,
typedef enum
UIAlertViewStyleDefault = 0,
UIAlertViewStyleSecureTextInput,
UIAlertViewStylePlainTextInput,
UIAlertViewStyleLoginAndPasswordInput
UIAlertViewStyle;
使用适合您要求的那个。要验证用户输入的输入,请使用我建议的上述方法。请参阅 this simple guide/tutorial 以使用这些样式的警报视图。
希望有帮助!
【讨论】:
使用您的解决方案,当点击按钮打开警报视图时,我的应用程序会崩溃 @ParasGorasiya 在问题中添加您的代码和崩溃报告。 我已经更新了我的代码并添加了崩溃报告和调用警报的代码。 感谢您提供此信息,但由于某些要求,我无法使用此解决方案,因此请提供任何其他解决方案。 @ParasGorasiya 这是推荐的方式。但是,如果这不符合您的要求,您可以实现自定义警报视图,或使用任何开源。 TSAlertView、ios-custom-alertview 是几个选项。我仍然会强调不要在UIAlertView
上做addSubview
。以上是关于当另一个警报出现时,警报视图关闭的主要内容,如果未能解决你的问题,请参考以下文章
Swift 中显示 UIAlertcontroller 时保持键盘打开?
UIAlertView 更改 UITabbar 项目选定的颜色