我在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!
答案 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
}
}