我知道很多问题,但我只是寻找另一种方式。
我有一个包含按钮的表格视图。按此按钮时,我想传递Two Arguments in that method
。
这两个论点是id& indexPath.row。
我该怎么做?
帮我解决这个问题..
谢谢,
答案 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;
}
注意,我们将参数设置为禁用状态,因此如果您不禁用按钮,则只使用此解决方案。如果您停止与该按钮的互动,则可以使用setUserInteractionEnabled
至NO
将其停用。