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被调用。
答案 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的子类。我的问题解决了。事实上,它使用起来有点困难。但不再是这种干扰性的错误。