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 多次调用[关闭]的主要内容,如果未能解决你的问题,请参考以下文章