我知道这方面有很多问题,但我只是寻找另一种方式。
我有一个包含按钮的表格视图。按下此按钮时,我喜欢通过Two Arguments in that method
.
这两个参数是 id & indexPath.row。
我怎样才能做到这一点?
帮我解决这个..
谢谢,
我知道这方面有很多问题,但我只是寻找另一种方式。
我有一个包含按钮的表格视图。按下此按钮时,我喜欢通过Two Arguments in that method
.
这两个参数是 id & indexPath.row。
我怎样才能做到这一点?
帮我解决这个..
谢谢,
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);
}
有一个最简单的方法,
- (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
to禁用它NO
。
只需创建一个 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。
希望它会有所帮助!