uialertview不止一次打电话

时间:2013-02-07 12:31:29

标签: iphone ios objective-c uibutton uialertview

这是刺激...... !!!

我在Google上搜索了这个问题,发现了一些 Relative Questions ,但没有 Satisfactory Answers

因此,当点击 - (IBAction) 按钮时,我有一个UITextField's方法可向NSMutableArray添加一些"Add"值。我只是想显示UIAlertView,如果UITextField 为空

我的代码:

- (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.
        }
}

我的问题:

每当我按“添加”按钮空textField 时,UIAlertView会出现三次

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

2)第二次显示“确定”按钮。 (这就是我添加的内容......)当我按“确定”按钮时它会消失。

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

编辑:

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

7 个答案:

答案 0 :(得分:1)

您的代码不包含任何问题。没有3它只有2个警报。这是警报视图的流程:

  1. 只要点击add按钮,就会有2个选择器(可能是其中一个或两个IBAction一个按钮),其中包含警报视图代码
  2. 现在,在alert1(带有确定按钮)
  3. 之前调用alert2(带有取消按钮)
  4. 然后调用alert1并隐藏alert2
  5. 现在,当您解析alert1(通过单击“确定”按钮)时,alert2将再次显示
  6. 现在您需要做的是检查“您的按钮是否与2个IBActions无关”,这应该是因为您没有此类代码来调用此方法中的其他警报。并检查它是否有帮助。

答案 1 :(得分:1)

是的,我遇到了同样的问题,但我的情况与你不同。

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

  2. 检查您是否正确关闭了警报视图有时我们没有将注意力集中在解除警报视图上,因此您的警报视图保持活动状态,当您重新打开时,应用程序会显示2到3次,具体取决于你的病情。因此,您可以使用代理已解除带按钮索引的警报视图来解除视图确实消失中的警报视图。我不确定,但它应该对你有用。祝你好运。

  3. 我不确定,但我认为您的IBAction按钮每次点击任何按钮都会被覆盖,所以您也应该检查它。

答案 2 :(得分:1)

<强>奇怪.... !!!

当您过度刺激时,有时会发生完全忽视代码的某些行。它也发生在我身上。我忽略了一个从-addButtonPressed方法调用的方法,其中有一个AlertView(当然有"Close"按钮)。

这就是解决方案本身!

答案 3 :(得分:0)

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

你所做的是你给了其他按钮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];
    }

答案 4 :(得分:0)

- (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.
    }
}

首先检查按钮点击???

时调用IBAction方法的次数

其他明智的放置UIAlertView的实例是公开 ..我的意思是放入.h file并在self.yourAlertViewName中将其作为.m file访问。

谢谢:)

答案 5 :(得分:0)

尝试比较这样。

if([testBox.text isEqualToString:@""]
{

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error"
                                                    message:errorDesc
                                                   delegate:self
                                          cancelButtonTitle:@"OK"
                                          otherButtonTitles:nil];

    [alert show];
}

答案 6 :(得分:-1)

使用以下代码检查:

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”。如果不需要,请确保您没有在视图控制器中实现委托。

希望它对你有所帮助。

干杯。