我正在以编程方式向UITableViewCell添加一个按钮。按下按钮时要运行的方法是- (void) quantityDown:(id)sender rowNumber:(int)rowNum
,其中rowNum
是按钮出现的行。
将目标添加到按钮时,Xcode会自动填充以下内容:
[buttonDown addTarget:self action:@selector(quantityDown:rowNumber:) forControlEvents:UIControlEventTouchUpInside];
但无论我尝试什么,我都无法将行号传递给方法。我假设代码的相关部分看起来像
action:@selector(quantityDown:rowNumber:indexPath.row)
但这并没有成功。我见过其他的东西,比如
action:@selector(quantityDown:)rowNumber:indexPath.row
和
action:@selector(quantityDown:rowNumber:)withObject:@"first" withObject:@"Second"
但是都不行。我不需要传递第一个参数,只需要传递行号。我也尝试定义像- (void) quantityDown:(int)rowNum
这样的方法,然后编写选择器,如:
action:@selector(quantityDown:indexPath.row)
但这也行不通。
思想?
提前致谢。
答案 0 :(得分:8)
为什么不制作Custom UIButton class
并将对象作为属性?
见下文。
<强> “MyButton.h”强>
@interface MyButton : UIButton
@property(nonatomic, strong)MyClass *obj;
@end
<强> “MyButton.m”强>
#import "MyButton.h"
@implementation MyButton
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
}
return self;
}
@end
现在将MyButton class
分配给单元格中的实际按钮/或初始化自定义按钮而不是普通UIButton class
并直接指定对象。
在IBAction
sender=MyButton
- (void) quantityDown:(id)sender{
MyButton *btn = (MyButton *)sender;
//You get the object directly
btn.obj;
}
这样做可以轻松访问所需的多个属性。它在其他实现中也很有用。
希望它有所帮助。
答案 1 :(得分:4)
按钮只能携带一个输入,因此请保持发件人和rowNum
相同,以便轻松处理
在用于行方法的单元格中。
UIButton *b = [UIButton buttonWithType:UIButtonTypeContactAdd];
b.tag = indexPath.row;
[b addTarget:self action:@selector(quantityDown:) forControlEvents:UIControlEventTouchUpInside];
你的方法
- (void)quantityDown:(id)sender
{
NSLog(@"%d", sender.tag);
}
希望这会有所帮助......
答案 2 :(得分:1)
将每个按钮标记设置为indexPath.row
。然后只需声明函数:
- (void)quantityDown:(id)sender
在那个方法中这样做:
UIButton *btn = (UIButton *)sender;
像这样添加目标:
[buttonDown addTarget:self action:@selector(quantityDown:) forControlEvents:UIControlEventTouchUpInside];
从btn.tag
您可以获得行号。希望这可以帮助。 :)