在objective-c中更改按钮的背景图像?

时间:2012-11-21 11:43:29

标签: objective-c ios uibutton

我的VC中UIButton的单元格上有UITableView,如此

arrowBtnUp = [UIButton buttonWithType:UIButtonTypeCustom];
arrowBtnUp.frame = CGRectMake(50,(65-19)/2,31, 31);
[arrowBtnUp setBackgroundImage:[UIImage imageNamed:@"arrow_up.png"] forState:UIControlStateNormal];
[arrowBtnUp addTarget:self action:@selector(slideAction) forControlEvents:UIControlEventTouchUpInside];
[cell.contentView addSubview:arrowBtnUp];

这是我的slideAction

-(void) slideAction
{
    [arrowBtnUp setBackgroundImage:[UIImage imageNamed:@"arrow_down.png"] forState:UIControlStateNormal];
    // also tried  with UIControlStateSelected/Highlighted
}

但它没有用。我找到this链接但没有帮助。 任何建议或样品将不胜感激。

5 个答案:

答案 0 :(得分:4)

您的代码应该可以正常工作。不要像这样更改您的代码并尝试

-(void) slideAction:(id)sender
{
   [sender setBackgroundImage:[UIImage imageNamed:@"arrow_down.png"] forState:UIControlStateNormal];
}

[arrowBtnUp addTarget:self action:@selector(slideAction:) forControlEvents:UIControlEventTouchUpInside];

并确保您的应用包中有arrow_down.png

答案 1 :(得分:3)

问题是您正在重用UIButton的arrowBtnUp实例。 因此,在slideAction方法中,您将无法获得按下的按钮参考。

要获取slideAction方法中的引用,您需要将其作为参数传递。

所以改变代码如:

[arrowBtnUp addTarget:self action:@selector(slideAction:) forControlEvents:UIControlEventTouchUpInside];


-(void) slideAction:(UIButton *)myButton
{
   [myButton setBackgroundImage:[UIImage imageNamed:@"arrow_down.png"] forState:UIControlStateNormal];
}

答案 2 :(得分:1)

如果您尝试在触摸后更改按钮图像,则应使用UIButton的控件状态。您可以为每个“状态”指定背景图像,让UIButton确定要显示的内容。

答案 3 :(得分:0)

背景图片与按钮上的图标不同。试试这个:

[_buttonConfirm setImage:[UIImage imageNamed:@"s.png"] forState:UIControlStateNormal];

答案 4 :(得分:0)

如果您尝试在触摸后更改按钮图像,则应使用UIButton的控件状态。您可以为每个“状态”指定背景图像,让UIButton确定要显示的内容。

[myButton setBackgroundImage:[UIImage imageNamed:@"arrow_up.png"] forState:UIControlStateNormal];
[myButton setBackgroundImage:[UIImage imageNamed:@"arrow_down.png"] forState:UIControlStateSelected];

无需在slideAction:target方法中手动切换背景图像。