web-dev-qa-db-ja.com

コード内からIBActionを呼び出す最良の方法は何ですか?

たとえば、インターフェイスビルダーでIButtonに接続されているIBActionがあるとします。

- (IBAction)functionToBeCalled:(id)sender
{
   // do something here   

}

-私のコードでは、たとえば別のメソッドで、それを呼び出すための最良の方法は何ですかIBAction

このように呼び出そうとすると、エラーが発生します。

[self functionToBeCalled:];

しかし、私がそれをこのように呼ぼうとすると(少し浮気していると思います)、それはうまくいきます:

[self functionToBeCalled:0];

それを適切に呼び出す適切な方法は何ですか?

30
iwasrobbed

適切な方法は次のいずれかです。

- [self functionToBeCalled:nil] 

Nil送信者を渡すこと。これは、通常のフレームワークを介して呼び出されなかったことを示します。

[〜#〜]または[〜#〜]

- [self functionToBeCalled:self]

自分を送信者として渡すことも正しいです。

どちらを選択するかは、関数が正確に何を実行するか、および送信者が何であるかによって異なります。

68
Jakob Borg

意味的に言えば、IBActionの呼び出しは、UIイベント(ボタンのタップなど)によってのみトリガーされる必要があります。複数の場所から同じコードを実行する必要がある場合は、そのコードをIBActionから専用のメソッドに抽出し、両方の場所からそのメソッドを呼び出すことができます。

- (IBAction)onButtonTap:(id)sender {
    [self doSomething];
}

これにより、送信者に基づいて追加のロジックを実行できます(おそらく、同じアクションを複数のボタンに割り当て、senderパラメーターに基づいて何をするかを決定できます)。また、IBActionに書き込む必要のあるコードの量を減らします(これにより、コントローラーの実装がクリーンに保たれます)。

10
Cristik