たとえば、インターフェイスビルダーでIButtonに接続されているIBActionがあるとします。
- (IBAction)functionToBeCalled:(id)sender
{
// do something here
}
-私のコードでは、たとえば別のメソッドで、それを呼び出すための最良の方法は何ですかIBAction?
このように呼び出そうとすると、エラーが発生します。
[self functionToBeCalled:];
しかし、私がそれをこのように呼ぼうとすると(少し浮気していると思います)、それはうまくいきます:
[self functionToBeCalled:0];
それを適切に呼び出す適切な方法は何ですか?
適切な方法は次のいずれかです。
- [self functionToBeCalled:nil]
Nil送信者を渡すこと。これは、通常のフレームワークを介して呼び出されなかったことを示します。
[〜#〜]または[〜#〜]
- [self functionToBeCalled:self]
自分を送信者として渡すことも正しいです。
どちらを選択するかは、関数が正確に何を実行するか、および送信者が何であるかによって異なります。
意味的に言えば、IBAction
の呼び出しは、UIイベント(ボタンのタップなど)によってのみトリガーされる必要があります。複数の場所から同じコードを実行する必要がある場合は、そのコードをIBAction
から専用のメソッドに抽出し、両方の場所からそのメソッドを呼び出すことができます。
- (IBAction)onButtonTap:(id)sender {
[self doSomething];
}
これにより、送信者に基づいて追加のロジックを実行できます(おそらく、同じアクションを複数のボタンに割り当て、sender
パラメーターに基づいて何をするかを決定できます)。また、IBAction
に書き込む必要のあるコードの量を減らします(これにより、コントローラーの実装がクリーンに保たれます)。