0

我在 UITableView 的每个单元格中都有一个按钮。现在我想在函数中将每个按钮绑定到它的操作方法:

 - (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 我从字符串转换。

有什么建议吗?蒂亚!

4

5 回答 5

2

更好的方法是为所有按钮分配相同的操作,并在操作方法中计算出按钮在按下时所在的行。否则,如果您的单元格被重复使用,每个按钮都会分配有多个操作,这将非常混乱。

您可以使用我对这个问题的回答轻松确定按钮或其他控件所在的行。

于 2012-07-23T09:32:31.003 回答
1

您应该将 selectorFromString 传递给 action 参数,而不是 @selector(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

如果您想SEL selectorFromString为您的 Button 使用 as 选择器,您应该更改@selector(selectorFromString:)selectorFromString

于 2012-07-23T09:21:57.467 回答
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 回答