【问题标题】:Why doesn't dismissWithClickedButtonIndex ever call clickedButtonAtIndex?为什么dismissWithClickedButtonIndex 从来没有调用clickedButtonAtIndex?
【发布时间】:2010-12-17 16:55:34
【问题描述】:

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

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

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

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

dismissWithClickedButtonIndex 不应该也调用 clickedButtonAtIndex 吗?

我试图让 clickedButtonAtIndex 在 CANCEL、OK 或什至 DONE 被点击时被调用。

【问题讨论】:

    标签: uitextfield uialertview iphone


    【解决方案1】:

    由于这是一个老问题,您现在可能已经想通了,但我对此感到非常沮丧,并且无法从 Google 获得任何帮助,因此对于将来遇到此问题的任何人:当您致电时dismissWithClickedbuttonIndex,被调用的方法是alertView:didDismissWithButtonIndex,而不是alertView:clickedButtonAtIndex。它的行为方式完全相同,我不明白为什么它们会是两个不同的方法来执行看似相同的操作,但它确实存在。

    【讨论】:

    • 感谢这些行,奇怪的委托模式,dismissWithClickedButton 应该至少调用两个委托方法,一个来处理按钮点击,另一个来处理关闭警报。令人困惑,多余的不必要的复杂性
    【解决方案2】:

    clickedButtonAtIndex 在用户实际点击按钮时被调用。单击该按钮可能会或可能不会关闭警报。标准的确定/取消按钮具有消除点击警报的效果。如果单击转换为关闭或调用 dismissWithClickedbuttonIndex 方法,则是否调用了 DismissWithButtonIndex

    【讨论】:

    • 确实如此,但从委托模式的角度来看,这没有任何意义。这意味着 alertViewClickedButtonAtIndex 有时被称为按钮被按下,而不是像委托方法所建议的那样总是如此。它是否关闭警报是另一个问题,现在这是 didDismissWithButtonClicked 的责任:
    【解决方案3】:

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

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

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

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

    【讨论】:

      【解决方案4】:

      我在 UIAlertView(Blocks) 类别中遇到了同样的问题 UIAlertView-Blocks

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-06
        • 2012-08-11
        相关资源
        最近更新 更多