-1

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

我有一个包含按钮的表格视图。按下此按钮时,我喜欢通过Two Arguments in that method.

这两个参数是 id & indexPath.row。

我怎样才能做到这一点?

帮我解决这个..

谢谢,

4

3 回答 3

1

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

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

2.如果您只是为了您的知识和另一种方式想要这样做,那么就是这样。

制作一个自定义类UIButton

我的按钮.h

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

我的按钮.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);
}
于 2013-08-09T11:54:31.920 回答
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;
}

请注意,我们正在将参数设置为禁用状态,因此只有在您不禁用按钮时才使用此解决方案。如果您停止与按钮的交互,您可以使用setUserInteractionEnabledto禁用它NO

于 2013-08-09T11:08:39.113 回答
0

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

我的按钮.h

@interface MyButton : UIButton

@property (nonatomic, retain) NSString *urArg

我的按钮.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。

希望它会有所帮助!

于 2013-08-09T10:22:42.587 回答