私はObjective-CとiOSのプログラミングに慣れていないので、イベントとアクションの処理について非常に混乱しています。Interface Builderのボタンをファイル所有者メソッドに接続すること(たとえば、個人的なメソッドbuttonClickedでボタンアクションを押すこと)と、ボタンイベントに応答するデリゲートを作成することの違いは何ですか?私はC#(.NET)から来ており、委任を介してのみイベントを処理しているため、混乱しています。
1 に答える
まず、プログラムでイベント処理を作成しましょう。いくつかの仮定..。
- あなたはクラスを持っています
MyViewController
myButton
このクラスにはプロパティ(UIButton *
)が含まれています- このクラスのイベントを処理したい
最初のステップは、ボタンのタップを処理するメソッドを作成することです。
-(void)onMyButtonTap:(UIButton *)sender {
// My button was tapped, whoa, which one is in sender argument
}
タップイベント処理を追加します。
-(void)loadView {
[super loadView];
[self.myButton addTarget:self action:@selector(onMyButtonTap:) forControlEvents: UIControlEventTouchUpInside];
}
このコードは何をしますか?self
この場合はMyViewController
クラスのインスタンスであり、イベント内のタッチアップを処理します(addTarget
)。火災action
時に呼び出されるメソッドです。UIControlEventTouchUpInside
したがって、このaddTarget:...
行はイベント処理を追加し、制御イベントが発生すると、これは...
[self onMyButtonTap:self.myButton];
...自動的に呼び出されます。
これは単純化された例であり、現実の世界ではより複雑になる可能性があります。
- あなたは
UIButton
別々に持つことができますUIView
(良い習慣、人々がそれらを入れるとき私は嫌いですUIViewController
) - 1つの方法で複数のボタンタップを処理できます(引数でそれらを区別し
sender
ます) - より多くのタップ処理メソッド、1つのボタンに対して1つのメソッドを作成できます。
- ..。
そして今、アウトレットに戻ります。アウトレットは、の自動接着剤ですaddTarget:...
。
UIButton
はのサブクラスでUIControl
あり、ここでは、他のイベントを処理する方法と、処理できるイベントを確認できます。
委任も一般的な方法ですが、ではありませんUIControl
。委任状などはありません。このようにする必要があります。
UIButton
または、たとえばブロックを介してイベントを処理するように拡張できます。これが1つの方法https://gist.github.com/2468899です。または、Googleで詳細を確認することもできます。