0
SEL twoArgumentSelector = @selector(methodWithTwoArguments:and:); 

[newsButton addTarget:self action:@selector(twoArgumentSelector) forControlEvents:UIControlEventTouchUpInside];

-(void)methodWIthTwoArguments:(id)argumentOne and:(id)argumentTwo;

セレクターで 2 つの引数を使用できる例をいくつか見てきました。上記のコードでどのようにそれを行うでしょうか? あらかじめご了承ください。

4

4 に答える 4

1

UIControlsイベントは、ターゲットセレクターで1つの引数が許可されている場合にのみ、自分自身への参照を送信します。これがあなたが得るすべてです。UIButtonは、そのようなUIControlサブクラスの1つです。

- (void)buttonAction:(id)sender; //(reference to button)

目的を達成するための最も簡単な方法は、ボタンターゲット(この場合self)で2つの引数セレクターを呼び出す別のメソッドを作成することです。

[newsButton addTarget:self action:@selector(buttonAction:) forControlEvents:...];

- (void)buttonAction:(id)sender
{
  [self methodwithTwoArguements:sender and:otherObject];
}

これはUIButtonサブクラスでも解決できますが、2番目の引数が何である必要があるかに応じて、これが最も簡単な方法です。

于 2012-08-02T04:18:38.553 に答える
1
@selector(twoArgumentSelector:and:)

コントロールイベントで2つの引数を送信する方法はわかりませんが...

編集:

セレクターが実際にメソッドを呼び出していないことがわかっているため、セレクターで引数を渡すことはできません。基本的には、コード ブロック (メソッド) の名前にすぎません。これを読んでください。より良い解決策は、コントロール イベントで別のメソッドを呼び出し、メソッドに送信する引数を 2 つのパラメーターで決定できるようにすることです。

于 2012-08-02T04:14:05.453 に答える
0

オブジェクトをサブクラス化する場合を除いて、UIControlEventsへの引数はイベントを送信するインスタンスのIDであるため、これは必要ありません。そのインスタンスから必要になる可能性のあるすべての情報を取得できます。

于 2012-08-02T04:19:07.963 に答える
0

あなたが探しているのはNSInvocationです。

次に例を示します。

SEL mySelector; // 2 parameter selector.

// ...

NSMethodSignature *signature = [[MyClass class] instanceMethodSignatureForSelector:mySelector];
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature];
[invocation setTarget:myTarget];
[invocation setArgument:arg1 atIndex:0];
[invocation setArgument:arg2 atIndex:1];
[invocation invoke];

これはまさにあなたが望むことをします。

ただし、バインド先のコントロール イベントは 2 番目のパラメーターに何も渡さないことに注意してください。これは、契約により、コールバックしているオブジェクトに実際に渡す 2 番目のパラメーターがある場合にのみ機能します。

于 2012-08-02T04:29:25.227 に答える