【问题标题】:uialertview called more than once [closed]uialertview 多次调用[关闭]
【发布时间】:2013-02-07 12:31:28
【问题描述】:

这很烦人......!!!

我搜索了这个问题,找到了一些 Relative Questions,但没有找到 Satisfactory Answers

所以我有一个 - (IBAction) 方法,当单击 "Add" 按钮时,它会向 NSMutableArray 添加一些 UITextField's 值。如果 UITextField 为 empty,我只是想显示 UIAlertView

我的代码:

- (IBAction)addButtonPressed:(id)sender
{
       if ([textField1.text length]==0 || [textField2.text length]==0 || !someFlag)
        {
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"MyApp" message:@"Please Enter Valid Data..." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
            [alert show];
            [alert release];
        }
        else
        {
             // Code to add textField's value to Array.
        }
}

我的问题:

每当我按 "Add" 按钮并带有 empty textField 时,UIAlertView 就会出现 三次

1) 第一次出现"Close" 按钮。 (我从未添加过...)它会在一段时间内消失。

2) 第二次出现 “确定” 按钮。 (这就是我添加的...)当我按下 “确定” 按钮时它会消失。

3) 第三次 再次出现“关闭”按钮。当我按下 “关闭” 按钮时它会消失。

编辑:

类似问题:UIAlertView Pops Up Three Times per Call Instead of Just Once。 有人可以帮我找到解决方案吗?

【问题讨论】:

  • 问题在于其他代码而不是此代码。检查其他代码。
  • 你能显示带有“关闭”按钮的alertView吗
  • 你有没有用条件[textField.text isEqualToString:@""]试一下
  • 您不应该与 NULL 进行比较。你能确认该方法被调用了 3 次吗?
  • @rptwsthi :这就是我想知道的。当我使用 if ([textField1.text isEqualToString:@""]) 运行代码时,它可以完美运行...

标签: iphone ios objective-c uibutton uialertview


【解决方案1】:

您的代码没有问题。没有 3 个,只有 2 个警报。这是警报视图的流程:

  1. 只要您点击 add 按钮,就会调用 2 个选择器(可能是另一个内部的一个或一个按钮的两个 IBAction),其中包含警报视图代码
  2. 现在 alert2(带有取消按钮)在 alert1(带有确定按钮)之前被调用
  3. 然后调用 alert1 并隐藏 alert2
  4. 现在,当您解决 alert1(通过单击确定按钮)时,alert2 再次出现

现在您需要做的是检查“如果您的按钮未与 2 个 IBActions 连接”,这应该是因为您没有此类代码可以在此方法中调用另一个警报。并检查它是否有帮助。

【讨论】:

  • 不,我的“添加”按钮只与 addButtonPressed ...
  • 你能把它上传到 git 上并提供一个链接吗?所以我可以检查问题
  • 只需检查我的问题中的更新...
  • +1 用于显示方向和您的努力。谢谢...
【解决方案2】:

奇怪....!!!

有时,当您过度烦躁时,您会完全忽略某些代码行。它也发生在我身上。我忽略了一种从 -addButtonPressed Method 调用的方法,它里面有一个 AlertView (当然是 "Close" 按钮)。

这就是解决方案本身!!!

【讨论】:

    【解决方案3】:

    是的,我也面临同样的问题,但我的情况与您不同。

    1. 您应该尝试[textfield.text isEqualToString:@""];,因为这是在 Objective-C 中比较空文本字段的标准方法。

    2. 检查您是否正确关闭了警报视图,有时我们不会专注于关闭警报视图,因此您的警报视图保持活动状态,当您重新打开应用程序时,它会显示 2 到 3 次,具体取决于你的条件。因此,您可以使用委托did dismiss alert view with button index 来关闭view did消失中的警报视图。我不确定,但它应该对你有用。祝你好运,伙计。

    3. 我不确定,但我认为每次单击任何按钮时,您的 IBAction 按钮都会被覆盖,因此您也应该检查一下。

    【讨论】:

    • 只需检查我的问题中的更新...
    • +1 表示您的第一点。
    【解决方案4】:

    试试下面的代码......让我知道它是否工作!!!!

    你所做的是你给其他按钮 nil 2 次..所以这可能是问题...

    编码愉快!!!!

     if ([textField.text length]==0)
        {
    
          UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"MyApp" message:@"Please Enter Valid Data..." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [alert show];
        [alert release];
        }
    

    【讨论】:

    • 是的,我试过了,但没用...
    【解决方案5】:

    尝试像这样比较。

    if([testBox.text isEqualToString:@""]
    {
    
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error"
                                                        message:errorDesc
                                                       delegate:self
                                              cancelButtonTitle:@"OK"
                                              otherButtonTitles:nil];
    
        [alert show];
    }
    

    【讨论】:

    • 检查我的问题中的评论,我已经尝试过这种方式......
    【解决方案6】:
    - (IBAction)addButtonPressed:(id)sender
    {
       if ([textField.text length]==0)
        {
               UIAlertView *alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Information",@"") message:NSLocalizedString(@"Txt is  Empty!",@"") delegate:nil cancelButtonTitle:NSLocalizedString(@"OK",@"") otherButtonTitles:nil];
            [alert show]; alert = nil;
        }
        else
        {
             // Code to add textField's value to Array.
        }
    }
    

    首先检查当Button被点击时你调用了多少次IBAction方法???

    UIAlertView 的其他明智放置实例是 public.. 我的意思是放入 .h file 并在 .m file 中以 self.yourAlertViewName 的身份访问它。

    谢谢:)

    【讨论】:

      【解决方案7】:

      检查以下代码:

      if ([textField.text length]==0)
      {
      UIAlertView *objAlertMsg = [[UIAlertView alloc] initWithTitle:@"MyApp"
                                                             message:@"Please Enter Valid Data..."
                                                            delegate:nil
                                                   cancelButtonTitle:@"OK"
                                                   otherButtonTitles:nil];
      [objAlertMsg show];
      [objAlertMsg release];
      }
      

      检查一下,我已将委托设置为“nil”而不是“self”。如果不需要,请确保您没有在视图控制器中实现委托。

      希望对你有所帮助。

      干杯。

      【讨论】:

      • 我试过了,但没有运气......!!
      • 请检查更新的代码,如果成功请告诉我。
      • 是的,我试过了,但没用...
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多