使用UIControl处理用户交互结束的首选事件是什么?

时间:2012-10-31 21:05:31

标签: objective-c cocoa-touch events

我有一个视图,其上有多个动态创建的UITextfields和UISegmented控件(但出于这个问题的目的,还可能有UIButtons,UISwitches,UISliders或其他任何继承自UIControl的东西)。我想在用户完成与任何控件的交互时执行操作,无论它属于哪个控件子类。通过查看其他问题,我想我想在创建后使用addTarget:action:forControlEvents:为每个控件添加观察者,但我不知道我正在寻找哪个事件。我已经尝试了所有列出的in the Apple Docs here似乎相关的内容,但似乎每次都没有触发它们。我在VBA中寻找类似.LostFocus的东西,但我似乎无法找出它是什么 - 我知道有一个becomeFirstResponder方法可以使控件处于活动状态,但我不能找到类似“lostFirstResponder”事件的内容。

我想我可以使用isKindOfClass来判断它是什么样的控制,并相应地设置我的事件,但这看起来有点草率,我觉得应该有更直接的方法来做到这一点。我也可以设置一个UITapGestureRecognizer并以这种方式构建一些东西,但这仍然感觉像是一种解决方法而不是它应该完成的方式。

1 个答案:

答案 0 :(得分:2)

如果您愿意进行子类化,则可以覆盖-resignFirstResponder以检测丢失的“焦点”,并采取相应措施。这可能仅适用于可以保存第一响应者状态的文本字段,例如对UISwitch不起作用。

由于所有UIControl对象都只是UIViews,你也可以覆盖touchesEnded来检测与这些元素的交互结束。虽然更容易接受的方法是将你的解雇处理程序方法添加为所有{的动作{1}}表示互动结束,或仅UIControlEvents

有关UIResponder的更多信息,请访问Apple的文档:

https://developer.apple.com/library/ios/documentation/uikit/reference/UIResponder_Class/Reference/Reference.html#//apple_ref/occ/instm/UIResponder/resignFirstResponder

许多UIKit类都有委托方法来指示交互何时结束,例如UIControlEventValueChanged具有UITextField方法。 textFieldDidEndEditing有类似的方法。