如何将参数传递给addTarget:action:forControlEvents?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (23)

我正在使用addTarget:action:forControlEvents像这样:

[newsButton addTarget:self
action:@selector(switchToNewsDetails)
forControlEvents:UIControlEventTouchUpInside];

我想将参数传递给我的选择器“switchToNewsDetails”。我成功做的唯一事情就是通过文本传递(id)发件人:

action:@selector(switchToNewsDetails:)

但我试图传递整数值等变量。用这种方式写这个不起作用:

int i = 0;
[newsButton addTarget:self
action:@selector(switchToNewsDetails:i)
forControlEvents:UIControlEventTouchUpInside];

用这种方式写下来也行不通:

int i = 0;
[newsButton addTarget:self
action:@selector(switchToNewsDetails:i:)
forControlEvents:UIControlEventTouchUpInside];

任何帮助,将不胜感激 :)

提问于
用户回答回答于
action:@selector(switchToNewsDetails:)

你不会switchToNewsDetails:在这里传递参数给方法。只需创建一个选择器,让按钮在发生某些操作时可以调用它。控件可以使用3种类型的选择器来响应动作,它们都具有预定义的参数含义:

  1. 没有参数 action:@selector(switchToNewsDetails)
  2. 其中1个参数表示发送消息的控件 action:@selector(switchToNewsDetails:)
  3. 有2个参数指示发送消息的控件和触发消息的事件: action:@selector(switchToNewsDetails:event:)

目前尚不清楚你究竟做了什么,但考虑到你想为每个按钮分配一个特定的详细信息索引,你可以执行以下操作:

  1. 为每个按钮设置一个标签属性等于所需的索引
  2. switchToNewsDetails:方法中,你可以获取该索引并打开适当的deatails: - (void)switchToNewsDetails:(UIButton*)sender{ [self openDetails:sender.tag]; // Or place opening logic right here }
用户回答回答于

要将自定义参数与按钮一起传递,只需要SUBCLASS UIButton即可

(ASR已启动,因此代码中没有任何版本。)

这是myButton.h

#import <UIKit/UIKit.h>

@interface myButton : UIButton {
    id userData;
}

@property (nonatomic, readwrite, retain) id userData;

@end

这是myButton.m

#import "myButton.h"
@implementation myButton
@synthesize userData;
@end

用法:

myButton *bt = [myButton buttonWithType:UIButtonTypeCustom];
[bt setFrame:CGRectMake(0,0, 100, 100)];
[bt setExclusiveTouch:NO];
[bt setUserData:**(insert user data here)**];

[bt addTarget:self action:@selector(touchUpHandler:) forControlEvents:UIControlEventTouchUpInside];

[view addSubview:bt];

接收功能:

- (void) touchUpHandler:(myButton *)sender {
    id userData = sender.userData;
}

扫码关注云+社区