我有一个带有textField的UIAlertView和两个按钮:保存&取消。点击保存按钮时,我正在检查文本字段是否为空,如果是,我只想将textFields占位符更改为:@“请输入名称”并将警报视图保留在屏幕上。但它会被自动解雇。保持UIAlertView显示
我该如何重写?
我有一个带有textField的UIAlertView和两个按钮:保存&取消。点击保存按钮时,我正在检查文本字段是否为空,如果是,我只想将textFields占位符更改为:@“请输入名称”并将警报视图保留在屏幕上。但它会被自动解雇。保持UIAlertView显示
我该如何重写?
将目标添加到子类警报视图中的文本字段。你也可以继承的alertView并不能排除as described in this post
[[alertView textFieldAtIndex:0] addTarget:self action:@selector(textFieldDidChange) forControlEvents:UIControlEventEditingChanged];
然后编写一个名为textFieldDidChange函数,用来检查你的alertView当前文本框,并设置一个布尔值,所以你知道是否要解除警报。
- (void) textFieldDidChange
{
NSString *alertViewText = [[alertView textFieldAtIndex:0] text];
if ([alertViewText isEqualToString:@""]) {
[alertView setMessage:@"Enter a name please."];
} else {
[alertView setMessage:@"Default Message"];
}
}
*另外,我建议禁用“保存”时,它是空的,而不必子类。 *
- (void) textFieldDidChange
{
NSString *alertViewText = [[alertView textFieldAtIndex:0] text];
if ([alertViewText isEqualToString:@""]) {
[alertView setMessage:@"Enter a name please."];
for (UIViewController *view in alertView.subview) {
if ([view isKindOfClass:[UIButton class]]) {
UIButton *button = (UIButton *)view;
if ([[[button titleLabel] text] isEqualToString:@"Save"])
[button setEnabled:NO];
}
}
} else {
[alertView setMessage:@"Default Message"];
for (UIViewController *view in alertView.subview) {
if ([view isKindOfClass:[UIButton class]]) {
UIButton *button = (UIButton *)view;
if ([[[button titleLabel] text] isEqualToString:@"Save"])
[button setEnabled:YES];
}
}
}
}
哇,感谢您的回复布伦丹。我认为这会容易得多。所以,我决定从头开始制作自己的AlertView。再次感谢! :) – 2012-02-09 20:31:59
我目前在应用程序中实现的替代方法并不困难,并给你很大的权力。例如,您可以在用户输入任何不允许的名称时禁用“保存”按钮。这可能包括一个空字符串,一个已经在使用的名称或一个禁用的名字(例如粗俗的词或关键字)。它还使得alertView:willDismissWithButtonIndex不必进行任何错误检查,因为用户只能针对无效名称点击“取消”。 – brendan 2012-02-09 21:00:56
是的,我明白了,这只是我已经开始在我的应用中实现自定义通知,并且我已经决定我还需要重新设计AlerView。这对我来说会更多工作和更复杂,然后修改本机警报 – 2012-02-09 21:03:25
检查这个答案在这里一个更好的方式来处理您的情况:http://stackoverflow.com/questions/1947783/prevent-uialertview-from-dismissing – jonkroll 2012-02-08 20:23:16
看来你已经子类覆盖默认解雇行为,请参阅:[http://stackoverflow.com/questions/2051402/is-it-possible-to-not-dismiss-a-uialertview](http://stackoverflow.com/questions/2051402/is-it -possible-to-not-dismiss-a-uialertview) – GregularExpressions 2012-02-08 21:41:36
谢谢你们,但正如我在下面向Brendan写的那样,我决定做出自己的警报视图。感谢您抽出时间和评论:) – 2012-02-09 20:33:17