为什么不解雇WithClickedButtonIndex曾经调用过clickedButtonAtIndex?

时间:2010-12-17 16:55:35

标签: uitextfield uialertview iphone

http://iphonedevelopment.blogspot.com/2009/02/alert-view-with-prompt.html

我正在使用该代码让我的iPhone应用程序显示一个包含UITextField并匹配CANCEL和OK按钮的alertView。

用户可以输入文字,点击CANCEL或OK ...我看到用户输入的文字...使用clickedButtonAtIndex方法中的代码。

这一切都有效,除了一件事:用户可能会在键盘上点击DONE而不是OK。 我正在使用dismissWithClickedButtonIndex来模拟一个OK点击...但是clickedButtonAtIndex永远不会被调用。

不应该dismissWithClickedButtonIndex也调用clickedButtonAtIndex?

如果CANCEL,OK或甚至DONE被击中,我正试图让clickedButtonAtIndex被调用。

4 个答案:

答案 0 :(得分:37)

由于这是一个老问题,你现在可能已经弄明白了,但我对此感到非常沮丧并且找不到谷歌的任何帮助,所以对于今后遇到这个问题的人来说:当你打电话的时候dismissWithClickedbuttonIndex,被调用的方法是alertView:didDismissWithButtonIndex,而不是alertView:clickedButtonAtIndex。它的行为完全相同,我无法弄清楚为什么它们是两个独立的方法,似乎是同一个动作,但它就是。

答案 1 :(得分:2)

用户实际点击按钮时会调用

clickedButtonAtIndex。单击该按钮可能会也可能不会取消警报。标准的“确定/取消”按钮具有解除点击警报的效果。如果点击转换为关闭或调用dismissWithClickedbuttonIndex方法,则会调用DismissWithButtonIndex

答案 2 :(得分:0)

我不确定我是否完全理解你的问题,但这是我的尝试:

首先,您需要从示例中删除if (buttonIndex != [alertView cancelButtonIndex])。这适用于OK和CANCEL按钮。

要识别键盘的DONE键,请使用- (BOOL)textFieldShouldReturn:(UITextField *)textField的{​​{1}}。在这里,您可以拨打UITextFieldDelegate来解除键盘。

另外,你在[textField resignFirstResponder]做什么?你不能创建自己的方法,并在需要时调用它吗?

答案 3 :(得分:0)

我对UIAlertView(Blocks)类别有同样的问题 UIAlertView-Blocks

我的解决方案:UIAlertView(Blocks) - > MYAlertView:UIAlertView

有时方法:- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex被调用。有时它没有打电话。

所以......我试图在很多方面找到解决方案。然后我用完全相同的代码创建了UIAlertView的子类。我的问题解决了。事实上,它使用起来有点困难。但不再是这种干扰性的错误。