32

たとえば、InterfaceBuilderのUIButtonに接続されているIBActionがあるとします。

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

}

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

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

[self functionToBeCalled:];

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

[self functionToBeCalled:0];

それを正しく呼び出すための適切な方法は何ですか?

4

2 に答える 2

70

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

- [self functionToBeCalled:nil] 

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

また

- [self functionToBeCalled:self]

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

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

于 2010-05-22T19:11:22.517 に答える
12

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

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

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

于 2015-10-01T08:49:49.263 に答える