0

複数の動的に作成された UITextfields と UISegmented コントロールを含むビューがあります (ただし、この質問の目的のために、UIButtons、UISwitches、UISliders、または UIControl から継承するものもある可能性があります)。コントロールのサブクラスに関係なく、ユーザーがいずれかのコントロールとの対話を終了するたびに、アクションを実行したいと考えています。他の質問を見ると、作成後に各コントロールにオブザーバーを追加するために使用したいと思いますaddTarget:action:forControlEvents:が、どのイベントを探しているのかわかりません。Apple Docs here にリストされている関連性のあるものをすべて試しましたが、毎回トリガーされるものはありません。私は.LostFocusVBAのようなものを探していますが、それが何であるかを見つけることができないようです.becomeFirstResponderコントロールをアクティブにするメソッドを探していますが、「lostFirstResponder」イベントのようなものは見つかりません。

isKindOfClassそれがどのような種類のコントロールであるかを判断し、それに応じてイベントをセットアップするために使用できると思いますが、それは少しずさんなようで、もっと直接的な方法があるべきだと思います。おそらく UITapGestureRecognizer をセットアップして、そのように何かを構築することもできますが、それでも回避策のように感じられ、本来の方法ではありません。

4

1 に答える 1

2

サブクラス化する場合は、-resignFirstResponder失われた「フォーカス」を検出するためにオーバーライドし、それに応じて行動することができます。UISwitchこれはおそらく、ファーストレスポンダーのステータスを保持できるテキストフィールドなどにのみ役立ち、たとえば機能しません。

すべての UIControl オブジェクトは単なる UIView であるtouchesEndedため、これらの要素との対話の終了を検出するためにオーバーライドすることもできます。より受け入れられる方法はUIControlEvents、対話の終了を示すすべての のアクションとして、または単にUIControlEventValueChanged.

UIResponder の詳細については、Apple のドキュメントを参照してください。

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

多くの UIKit クラスには、対話がいつ終了したかを示すデリゲート メソッドがあります。たとえばUITextFieldtextFieldDidEndEditingメソッドがあります。UITextView同様の方法があります。

于 2012-10-31T21:25:35.077 に答える