我在以下代码中有一组UIButtons。我遇到的问题是我需要一个与每个按钮相关的独特方法。此时任何按下的按钮都使用action:@selector(buttonPressed:)
我坚持如何将方法连接到每个按钮。
// Create buttons
NSMutableArray* buttonArray = [NSMutableArray array];
NSArray * myImages = [NSArray arrayWithObjects:@"category-cafe-unsel.png", @"category-food-unsel.png", @"category-clothing-unsel.png", @"category-health-unsel.png", @"category-tech-unsel_phone.png" , @"category-tech2-unsel.png", @"catefory-theatre-unsel.png", @"category-travel-unsel.png", nil];
// only create the amount of buttons based on the image array count
for(int i = 0;i < [myImages count]; i++)
{
// Custom UIButton
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
[btn setFrame:CGRectMake(0.0f, 20.0f, 52.0f, 52.0f)];
[btn setTitle:[NSString stringWithFormat:@"Button %d", i] forState:UIControlStateNormal];
[btn setImage:[UIImage imageNamed:[myImages objectAtIndex:i]] forState:UIControlStateNormal];
[btn addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];
[buttonArray addObject:btn];
}
感谢您的帮助
:)
答案 0 :(得分:4)
最佳选择是对所有same method
使用buttons
。为此,您应使用tags
。所以每个按钮都有自己的标签。
btn.tag = i;
此处tag number
将用于differentiating
button
called
的{{1}}。
然后在方法中你可以获得标签,这也可以通过switch-statement完成:
-(void)buttonPressed:(UIButton*)sender
{
if( sender.tag == 1 ){
} else {
}
}
答案 1 :(得分:2)
使用以下代码:
-(void)buttonPressed:(UIButton*)sender
{
UIButton *btn = sender;
for(int i = 0;i < [myImages count]; i++)
{
if (i == [btn tag]) {
//Your code
break;
}
}
}
它完全正常工作。当您获得Tag值时,您可以按标签值执行操作。
谢谢,
Hemang。
答案 2 :(得分:1)
[btn addTarget:self action:@selector(NSSelectorFromString([NSString stringWithFormat:@"button%d", i])) forControlEvents:UIControlEventTouchUpInside];
相应的行动将是:
-(void)button1:(UIButton*)sender
-(void)button2:(UIButton*)sender
-(void)button3:(UIButton*)sender
-(void)button4:(UIButton*)sender
等等。
但是,或者考虑仅使用一种操作方法并使用标记来分隔操作方法中的按钮。