iOS - 在行动中传递参数:@selector()

时间:2014-04-03 03:24:38

标签: ios objective-c methods action selector

我正在以编程方式向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)

但这也行不通。

思想?

提前致谢。

3 个答案:

答案 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您可以获得行号。希望这可以帮助。 :)