如何在循环中设置UIButtons的操作?

时间:2012-07-23 08:25:34

标签: ios uitableview nsstring uibutton selector

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

有什么建议吗? TIA!

5 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分: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];

答案 2 :(得分:0)

如果您希望使用SEL selectorFromString作为按钮的选择器,则应将@selector(selectorFromString:)更改为selectorFromString

答案 3 :(得分:0)

尝试这种方式,因为您已经准备好使用您的选择器:

[button addTarget:self action:selectorFromString forControlEvents:UIControlEventTouchDown];

答案 4 :(得分: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
     }
}