在 iOS 上以编程方式向按钮添加操作
Posted
技术标签:
【中文标题】在 iOS 上以编程方式向按钮添加操作【英文标题】:Adding actions to a button programmatically on iOS 【发布时间】:2011-04-28 16:36:32 【问题描述】:我正在尝试向我以编程方式创建的按钮添加一个操作:
[btn addTarget:self
action:@selector(indexAction)
forControlEvents:UIControlEventTouchUpInside];
这很好用。但是,我现在想将一个变量 (int k) 传递给 indexAction 方法。我无法让它工作:
[btn addTarget:self
action:@selector([self indexAction:k])
forControlEvents:UIControlEventTouchUpInside];
我确定我做错了什么。这是上面代码的上下文:
-(void) initIndexButtons
float buttonPadding = -8;
float buttonWidth = 23;
float buttonHeight = 80;
CGRect frame = CGRectMake(0,0,0,0);
for (int k=0;k<5;k++)
UIButton* btn = [[UIButton alloc] initWithFrame:frame];; btn.tag = k;
btn.frame = CGRectMake(0, k*(buttonPadding+buttonHeight), buttonWidth, buttonHeight);
UIImage *newImage = [UIImage imageNamed:@"index.png"];
[btn setBackgroundImage:newImage forState:UIControlStateNormal];
[btn addTarget:self
action:@selector(self indexAction:k)
forControlEvents:UIControlEventTouchUpInside];
-(void)indexAction:(int *)buttonTag
NSLog(@"buttonTag: %i", buttonTag);
编辑:
我将代码更改为:
// ...
[btn addTarget:self
action:@selector(indexAction:)
forControlEvents:UIControlEventTouchUpInside];
//[self indexAction:k];
[indexView addSubview:btn];
[indexView sendSubviewToBack:btn];
-(void)indexAction:(id)sender
NSInteger *tid = ((UIControl *) sender).tag;
NSLog(@"buttonTag: %i", tid);
但现在我收到警告消息“初始化从整数生成指针,而不对行 NSInteger *tid = ((UIControl *) sender).tag;
进行强制转换
编辑:
这是正确的代码行:
NSInteger tid = ((UIControl*)sender).tag;
【问题讨论】:
你想达到什么目的?如果您需要找出点击了哪个按钮,那么您已经将 tag 属性设置为“k”。 @onnoweb:实际上,是的,我需要找出点击了哪个按钮。所以我以为我为每个按钮分配了一个“自定义”操作,不是吗?我如何检查标签属性?我现在的有限目标是让 indexAction 方法打印按下了哪个按钮。感谢您的帮助!tag
属性是一个整数,但您分配给它的变量 (tid
) 被声明为指向整数的指针。删除*
,它应该可以工作。
【参考方案1】:
按钮调用的方法通常只有一个参数:
(id)sender
看看问题-how to pass a variable to a UIButton action
【讨论】:
我看过这个,但现在我收到了一个警告(见上文 - 我已经更新了我的问题)。【参考方案2】:tag
是 NSInteger
不是 NSInteger*
改成
NSInteger tid = ((UIControl*)sender).tag;
【讨论】:
【参考方案3】:设置方法是:
-(void)indexAction:(id)sender
NSLog(@"Tag=%@"[(UIButton*)sender tag]);
和电话:
[btn addTarget:self
action:@selector(self indexAction:)
forControlEvents:UIControlEventTouchUpInside];
不太确定我的选角,还没有测试过,但我认为它应该可以工作! 祝你好运。
【讨论】:
以上是关于在 iOS 上以编程方式向按钮添加操作的主要内容,如果未能解决你的问题,请参考以下文章