uialertview 多次调用[关闭]

Posted

技术标签:

【中文标题】uialertview 多次调用[关闭]【英文标题】:uialertview called more than once [closed] 【发布时间】: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:@""]) 运行代码时,它可以完美运行... 【参考方案1】:

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

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

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

【讨论】:

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

奇怪....!!!

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

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

【讨论】:

【参考方案3】:

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

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

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

    我不确定,但我认为每次单击任何按钮时,您的 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”。如果不需要,请确保您没有在视图控制器中实现委托。

希望对你有所帮助。

干杯。

【讨论】:

我试过了,但没有运气......!! 请检查更新的代码,如果成功请告诉我。 是的,我试过了,但没用...

以上是关于uialertview 多次调用[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

applicationWillTerminate 问题

从登录 UIAlertView 取消时,应用内购买不发送 SKPaymentCancelled

如何从 UIAlertView 获取取消和调用用户操作

如何取消并从UIAlertView调用用户操作

快速连续多次创建 UIAlertView

按顺序显示 UIAlertViews