2012-02-08 105 views
2

我有一个带有textField的UIAlertView和两个按钮:保存&取消。点击保存按钮时,我正在检查文本字段是否为空,如果是,我只想将textFields占位符更改为:@“请输入名称”并将警报视图保留在屏幕上。但它会被自动解雇。保持UIAlertView显示

我该如何重写?

+1

检查这个答案在这里一个更好的方式来处理您的情况:http://stackoverflow.com/questions/1947783/prevent-uialertview-from-dismissing – jonkroll 2012-02-08 20:23:16

+0

看来你已经子类覆盖默认解雇行为,请参阅:[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

+0

谢谢你们,但正如我在下面向Brendan写的那样,我决定做出自己的警报视图。感谢您抽出时间和评论:) – 2012-02-09 20:33:17

回答

6

将目标添加到子类警报视图中的文本字段。你也可以继承的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]; 
     }  
    } 
    } 
} 
+0

哇,感谢您的回复布伦丹。我认为这会容易得多。所以,我决定从头开始制作自己的AlertView。再次感谢! :) – 2012-02-09 20:31:59

+0

我目前在应用程序中实现的替代方法并不困难,并给你很大的权力。例如,您可以在用户输入任何不允许的名称时禁用“保存”按钮。这可能包括一个空字符串,一个已经在使用的名称或一个禁用的名字(例如粗俗的词或关键字)。它还使得alertView:willDismissWithButtonIndex不必进行任何错误检查,因为用户只能针对无效名称点击“取消”。 – brendan 2012-02-09 21:00:56

+0

是的,我明白了,这只是我已经开始在我的应用中实现自定义通知,并且我已经决定我还需要重新设计AlerView。这对我来说会更多工作和更复杂,然后修改本机警报 – 2012-02-09 21:03:25