2010-12-17 97 views
13

http://iphonedevelopment.blogspot.com/2009/02/alert-view-with-prompt.html为什么不dismissWithClickedButtonIndex曾经调用clickedButtonAtIndex?

我使用的代码让我的iPhone应用程序,以显示与包括的UITextField的alertView和匹配取消和OK按钮。

用户可以输入文本,点击取消或确定...我看到用户输入的文本...在clickedButtonAtIndex方法中使用我的代码。

除了一件事情之外,它都可以工作:用户可能会在键盘上点击完成,而不是确定。 我使用dismissWithClickedButtonIndex模拟一个确定点击...但是然后clickedButtonAtIndex永远不会被调用。

不应该dismissWithClickedButtonIndex还调用clickedButtonAtIndex?

我试图让clickedButtonAtIndex被调用,如果取消,或确定,甚至完成击中。

回答

0

我不知道是否我完全理解你的问题,但这里是我的尝试:

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

要识别键盘的DONE键,请使用UITextFieldDelegate- (BOOL)textFieldShouldReturn:(UITextField *)textField。在这里您可以拨打[textField resignFirstResponder]来关闭键盘。

另外,你在做什么clickedButtonAtIndex?难道你不能创建自己的方法并在需要时调用它吗?

37

由于这是一个老问题,您现在可能已经弄清楚了,但我对此感到非常沮丧,无法从Google获得任何帮助,因此对于未来遇到此问题的任何人:当您调用dismissWithClickedbuttonIndex,被调用的方法是alertView:didDismissWithButtonIndex,而不是alertView:clickedButtonAtIndex。它的行为方式完全一样,我无法弄清楚为什么它们会成为两个单独的方法,看似是同一个动作,但它就是这样。

+0

谢谢你这些线条,古怪的委托模式,dismissWithClickedButton应该至少调用两个委托方法来处理按钮点击和另一个来处理关闭警报。令人困惑,多余的不必要的复杂性 – 2014-08-29 10:47:27

2

clickedButtonAtIndex在用户实际点击按钮时被调用。点击按钮可能会或可能不会解除警报。标准的确定/取消按钮具有在点击时消除警报的效果。如果点击意味着解雇或调用方法,那么调用DismissWithButtonIndex

+0

的确,但从委托模式的角度来看,这是毫无意义的。这意味着什么alertViewClickedButtonAtIndex被称为有时一个按钮被按下,并不总是作为委托方法建议。无论是否关闭警报,这是另一个问题,现在这是didDismissWithButtonClicked的责任: – 2014-08-29 10:52:50

0

我有UIAlertView中(块)同样的问题categoty UIAlertView-Blocks

我的解决办法:UIAlertView中(块) - > MYAlertView:UIAlertView中

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

所以...我试图找到解决方案的许多来源。然后我用完全相同的代码创建了UIAlertView的子类。我的问题解决了。实际上它使用起来有点困难。但没有更多这种侵入性的错误。

相关问题