【问题标题】:Keep UIAlertView displayed保持 UIAlertView 显示
【发布时间】:2012-02-08 20:07:42
【问题描述】:

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

如何覆盖它?

【问题讨论】:

标签: objective-c ios uialertview


【解决方案1】:

将目标添加到子类 alertView 中的文本字段。您可以将 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。再次感谢! :)
  • 我目前在一个应用程序中实现了另一种方法,它并不难,而且给你很大的力量。例如,当用户输入任何不允许的名称时,您可以禁用“保存”按钮。这可能包括一个空字符串、一个已在使用的名称或一个被禁止的名称(例如粗俗的词或关键字)。它还使得 alertView:willDismissWithButtonIndex 不必进行任何错误检查,因为用户只能点击“取消”来获取无效名称。
  • 是的,我明白了,只是我已经开始在我的应用程序中实现自定义通知,并且我决定我还需要重新设计 AlerViews。对我来说,这将是更多的工作和更复杂的修改本机警报
  • 顺便问一下,您能帮忙解决一下如何以编程方式使背景变暗,比如出现警报视图时?
  • 我实际上在一个应用程序中有这样的东西。您可以做的是添加一个 imageView 或一个设置为全黑图像的按钮。您开始时将其 alpha 设置为 0(您可以在 IB 中执行此操作)。当你想让它出现时,你将它的 alpha 设置为 0.5 左右,这样它就会得到灰色的效果。我还添加了动画效果,这样它就不会突然出现。 [UIView beginAnimations:nil context:NULL]; [UIView setAnimationDuration:.2]; [blackWhatever setAlpha:.5]; [UIButton commitAnimations];我将变暗的图像作为一个按钮,以便用户可以单击以关闭。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-07
相关资源
最近更新 更多