3

ユーザーのアクションから実際に呼び出されていないときにIBActionを使用するときに問題はありますか?

あなたがのような行動をとるなら

-(IBAction)sayHello:(id)sender;

次のように、クラス内から呼び出すことができます。

[self sayHello:@"x"]

@ "x"は何もしません、送信者のために記入するだけです。

(id)senderなしで実際にIBActionメソッドを作成できます

-(IBAction)sayHello;

そして、ユーザーのアクションとコード内の両方から呼び出しますが、インターフェースから有用な送信者情報を取得することはできません。コードから呼び出すときに、送信者に入力する「正しい」方法は何ですか?また、コード内から呼び出されたときに送信する送信者情報を作成できますか?

ただそれを理解しようとしています。

4

3 に答える 3

6

OOPの良い習慣は、メソッド-(IBAction)sayHello:(id)sender;を屈折させることだと思います。

と呼ばれる別のメソッドに:-(void)sayHello; メソッド内-(IBAction)sayHello:(id)sender {[self sayHello]; }

他のメソッドがsayHello:(id)senderアクションを呼び出して何らかのジョブを実行する場合は、sayHelloを呼び出すことができます。メソッド名は、クライアントが問題なく呼び出すか、回避するために意味のあるものにする必要があります。テストまたはデバッグする必要がある場合に役立ちます

于 2010-06-12T01:19:38.017 に答える
3

送信者はUIコンポーネントである必要があります。したがって、クラスにUIButtonがある場合、たとえば...

UIButton *button;

次に、それをパラメータとしてアクションに送信できます。

[self sayHello:button];

メソッドの内部では、UIから呼び出されたか、シミュレートされた方法で呼び出されたかに関係なく、送信者が誰であるかを検出し、それに基づいて異なる動作をするロジックを使用できます。このようにして、複数のボタンまたは他のコンポーネントが同じアクションメソッドを再利用できます。

于 2010-06-12T01:00:22.323 に答える
2

実際にsenderパラメーターを使用している場合を除いて(詳細については、Jaanusの回答を参照してください)、nilコードからメソッドを呼び出すときにパラメーターを渡しても問題ありません。

于 2010-06-12T01:03:49.217 に答える