0

我有一个带有 UIScrollView 的以编程方式创建的 UIButton。当按下这个按钮时,它会触发一个动作,但除了触发动作之外,我还希望按钮向方法发送一个 (int) 变量。

这是我的按钮:

UIButton *btn15 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    [btn15 setTitle:@"Cool title" forState:UIControlStateNormal];
    [btn15 setFrame:CGRectMake(165, 770, 145, 145)];
    [btn15 addTarget:self action:@selector(selectFav) forControlEvents:UIControlEventTouchUpInside];
    [_scroller addSubview:btn15];

...所以这是我在此滚动视图中的第 15 个按钮。我想编写方法'selectFav'来处理按钮按下。我希望每个按钮都将其编号发送到方法,然后让方法将编号打印到 NSLog。由于这个例子是按钮 15,我想让数字 15 以某种方式传递给 selectFav。

我假设这是一件容易的事,但似乎无法让它发挥作用。感谢您的任何建议!

4

4 回答 4

1

您可以在按钮中使用 UIView 的 tag 属性,然后在按下按钮后将值从按钮中取出。

就像是:

- (void)yourAction:(UIButton *)sender{
    NSInteger value=[sender tag];
}
于 2013-06-04T00:50:04.980 回答
1

这在BlocksKit中很容易做到。BlocksKit 允许您将块附加为事件处理程序。

UIButton *btn15= ...;
[btn15 addEventHandler:^(id sender) {
    [self selectFav:15];
} forControlEvents:UIControlEventTouchUpInside];

- (void)mySelectFav:(NSUInteger)buttonId {
    ...
}
于 2013-06-04T01:45:15.290 回答
1

我就是这样做的。设置按钮的标签属性,然后在按钮操作中获取该属性。

-(void)myMethod
{
   UIButton *btn15 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    [btn15 setTitle:@"Cool title" forState:UIControlStateNormal];
    [btn15 setFrame:CGRectMake(165, 770, 145, 145)];
    [btn15 addTarget:self action:@selector(selectFav:) forControlEvents:UIControlEventTouchUpInside];
    [_scroller addSubview:btn15];
    btn15.tag = 15;

}

-(void)selectFav:(id)sender
{
    UIButton *button = (UIButton *)sender;
    NSLog(@"%d", button.tag); //this will print 15. Store it in a int variable
}
于 2013-06-04T02:38:41.677 回答
0

您可以使用@J2theC 提到的正在传递的 UIButton 的标记,也可以向 UIButton 添加属性:子类 UIButton 以添加属性

当您将 UIButton 传递给选择器时,您可以识别从标记或属性传递的 UIButton。

也不要忘记更新您的 addTarget 方法实现以包括在传递的选择器参数中:

[btn15 addTarget:self action:@selector(selectFav:) forControlEvents:UIControlEventTouchUpInside];
于 2013-06-04T00:56:40.177 回答