从TableView单元格中传递方法中的多个参数

时间:2013-08-09 10:09:59

标签: iphone ios objective-c arguments

我知道很多问题,但我只是寻找另一种方式。

我有一个包含按钮的表格视图。按此按钮时,我想传递Two Arguments in that method

这两个论点是id& indexPath.row。

我该怎么做?

帮我解决这个问题..

谢谢,

3 个答案:

答案 0 :(得分:1)

1。无需在按钮@selector中传递两个参数即可获得indexPath:。按钮本身就足够了。

我已经在这里给出了答案 - How to pass UITableView IndexPath to UIButton @selector by parameters in iOS?

2。如果您只是为了您的知识和其他方式而这样做,那么就是这样。

制作UIButton的自定义类。

<强> MyButton.h

@interface MyButton : UIButton
@property (nonatomic, retain) NSIndexPath *indPath;
@end

<强> MyButton.m

#import "MyButton.h"

@implementation MyButton
@synthesize indPath = _indPath;

- (id)initWithFrame:(CGRect)frame
{
   self = [super initWithFrame:frame];
   if (self) {
    // Initialization code
   }
   return self;
}
@end

并使用此button代替UIButton

 MyButton *btn = [[MyButton alloc] initWithFrame:CGRectMake(60.0, 2.0, 200.0, 40.0)];
[btn setBackgroundColor:[UIColor redColor]];
[btn setTitle:[NSString stringWithFormat:@"Button-%d", indexPath.row] forState:UIControlStateNormal];

// Assign indexPath here
btn.indPath = indexPath;

[btn addTarget:self action:@selector(clicked:) forControlEvents:UIControlEventTouchUpInside];

[cell.contentView addSubview:btn];

注意:此处不要使用UIButtonButtonWithType。

这是clicked:方法

-(void)clicked:(MyButton *)sender
{
    NSLog(@"sender = %@", sender);
    NSLog(@"sender indexPath = %@", sender.indPath);
}

答案 1 :(得分:0)

只需创建一个UIButton的子类,并拥有您想要传递的参数。 例如:

MyButton.h

@interface MyButton : UIButton

@property (nonatomic, retain) NSString *urArg

MyButton.m

@implementation MyButton
@synthesize urArg;

用法

MyCustomButton *urButton = [[MyCustomButton alloc] init];
urButton.urArg = @"YOUR ARGUMENT HERE";
[urButton addtarget:self action:@selector(btnTapped:) forControlEvents:UIControlEventTouchUpInside];

//      Implementation Part of Selector
- (void)btnTapped:(id)sender {

               MyButton *btn= (MyButton*)sender; 
               argType *arg = btn.urArg;
}

这样就可以获得多个参数。

对于第一个参数,您可以btn.tag = indexPath.row。第二次使用自定义btn。

希望它会有所帮助!

答案 2 :(得分:0)

有一种最简单的方法,

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath     *)indexPath
{
     [button setTitle:@"YourArgument" forState:UIControlStateDisable];
     [button setTag:indexPath.row];
     [button addtarget:self action:@selector(btnTapped:) forControlEvents:UIControlEventTouchUpInside];
}

- (void)btnTapped:(id)sender {
     UIButton *btn= (UIButton *)sender; 
     NSString *argument = [button titleForState:UIControlStateDisabled];
     int tagID = btn.tag;
}

注意,我们将参数设置为禁用状态,因此如果您不禁用按钮,则只使用此解决方案。如果您停止与该按钮的互动,则可以使用setUserInteractionEnabledNO将其停用。