0

UITableViewの各セルに1つのボタンがあります。次に、各ボタンを関数内のアクションメソッドにバインドします。

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { ...}

これが私の試してみるコードです:

    NSString* functionNamePrefix = @"actionMethod_";
    NSString* functionName = [functionNamePrefix stringByAppendingString:[NSString stringWithFormat:@"%d",indexPath.row]];
    SEL selectorFromString = NSSelectorFromString(functionName);
    [button addTarget:self action:@selector(selectorFromString:) forControlEvents:UIControlEventTouchDown];

失敗は次のとおりです。アクションセレクターは関数名として「selectorFromString」を取りますが、SELは文字列から変換します。

なにか提案を?TIA!

4

5 に答える 5

2

より良い方法は、すべてのボタンに同じアクションを割り当て、アクションメソッドで、ボタンが押されたときにボタンがどの行にあったかを計算することです。そうしないと、セルが再利用される場合、各ボタンに複数のアクションが割り当てられ、非常に混乱します。

この質問に対する私の回答を使用して、ボタンまたは他のコントロールがあった行を簡単に判別できます。

于 2012-07-23T09:32:31.003 に答える
1

@selector(selectorFromString :)ではなく、selectorFromStringをアクションパラメーターに渡す必要があります

NSString* functionNamePrefix = @"actionMethod_";
NSString* functionName = [functionNamePrefix stringByAppendingString:[NSString stringWithFormat:@"%d",indexPath.row]];
SEL selectorFromString = NSSelectorFromString(functionName);
[button addTarget:self action:selectorFromString forControlEvents:UIControlEventTouchDown];
于 2012-07-23T09:21:20.090 に答える
0

セレクターを使用できるようになっているので、この方法を試してください。

[button addTarget:self action:selectorFromString forControlEvents:UIControlEventTouchDown];
于 2012-07-23T09:26:54.707 に答える
0

このようにしてみてください。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { ...}

[button setTag:indexPath.row];
[button addTarget:self action:@selector(buttonTapped:) forControlEvents:UIControlEventTouchDown];

buttonTapped

-(void)buttonTapped:(UIButton *)button{

     switch(button.tag){
     //Your code here
     }
}
于 2012-07-23T09:34:12.410 に答える
0

SEL selectorFromStringボタンのセレクターとしてを使用する場合は、次のように変更@selector(selectorFromString:)する必要があります。selectorFromString

于 2012-07-23T09:21:57.467 に答える