我有一个视图,其上有多个动态创建的UITextfields和UISegmented控件(但出于这个问题的目的,还可能有UIButtons,UISwitches,UISliders或其他任何继承自UIControl的东西)。我想在用户完成与任何控件的交互时执行操作,无论它属于哪个控件子类。通过查看其他问题,我想我想在创建后使用addTarget:action:forControlEvents:
为每个控件添加观察者,但我不知道我正在寻找哪个事件。我已经尝试了所有列出的in the Apple Docs here似乎相关的内容,但似乎每次都没有触发它们。我在VBA中寻找类似.LostFocus
的东西,但我似乎无法找出它是什么 - 我知道有一个becomeFirstResponder
方法可以使控件处于活动状态,但我不能找到类似“lostFirstResponder”事件的内容。
我想我可以使用isKindOfClass
来判断它是什么样的控制,并相应地设置我的事件,但这看起来有点草率,我觉得应该有更直接的方法来做到这一点。我也可以设置一个UITapGestureRecognizer并以这种方式构建一些东西,但这仍然感觉像是一种解决方法而不是它应该完成的方式。
答案 0 :(得分:2)
如果您愿意进行子类化,则可以覆盖-resignFirstResponder
以检测丢失的“焦点”,并采取相应措施。这可能仅适用于可以保存第一响应者状态的文本字段,例如对UISwitch
不起作用。
由于所有UIControl对象都只是UIViews,你也可以覆盖touchesEnded
来检测与这些元素的交互结束。虽然更容易接受的方法是将你的解雇处理程序方法添加为所有{的动作{1}}表示互动结束,或仅UIControlEvents
。
有关UIResponder的更多信息,请访问Apple的文档:
许多UIKit类都有委托方法来指示交互何时结束,例如UIControlEventValueChanged
具有UITextField
方法。 textFieldDidEndEditing
有类似的方法。