为啥dismissWithClickedButtonIndex 从来没有调用clickedButtonAtIndex?
Posted
技术标签:
【中文标题】为啥dismissWithClickedButtonIndex 从来没有调用clickedButtonAtIndex?【英文标题】: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 被点击时被调用。
【问题讨论】:
【参考方案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 的子类。我的问题就解决了。事实上,它使用起来有点困难。但不再有这种侵入性的错误。
【讨论】:
以上是关于为啥dismissWithClickedButtonIndex 从来没有调用clickedButtonAtIndex?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 DataGridView 上的 DoubleBuffered 属性默认为 false,为啥它受到保护?