我有一个以编程方式创建的带有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。
我认为这是一件容易的事情,但似乎无法使其发挥作用。谢谢你的任何建议!
答案 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];