如何将变量传递给触发UIButton时调用的方法?

时间:2013-06-04 00:43:26

标签: ios objective-c uibutton

我有一个以编程方式创建的带有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 个答案:

答案 0 :(得分:1)

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

类似的东西:

- (void)yourAction:(UIButton *)sender{
    NSInteger value=[sender tag];
}

答案 1 :(得分:1)

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

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

- (void)mySelectFav:(NSUInteger)buttonId {
    ...
}

答案 2 :(得分: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
}

答案 3 :(得分:0)

您可以使用@ J2theC提及的UIButton标记,也可以向UIButton添加属性:Subclass UIButton to add a property

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

另外,请不要忘记更新addTarget方法实现,以便在传递的selector参数中包含

[btn15 addTarget:self action:@selector(selectFav:) forControlEvents:UIControlEventTouchUpInside];