4

我想根据 Web 服务响应更改按钮背景图像。如果作为回应,我将未读消息设为 true,则图像将不同,如果没有未读消息,图像将不同。我得到了很好的响应,但无法更改按钮的背景图像。

这是我正在使用的片段

if(unread>0){
    [badgeTitle setBackgroundImage:[UIImage imageNamed:@"unread.png"] forState:UIControlStateNormal];
}
else{
    [badgeTitle setBackgroundImage:[UIImage imageNamed:@"read.png"] forState:UIControlStateNormal];
}
4

8 回答 8

7

如果您看一下,解决方案可能非常简单。保留一个全局 UIButton 而不是本地的。这很有帮助,因为当 Web 请求返回响应时,按钮需要存在于范围内,而不是从内存中删除。

所以使用,

self.myButton = [UIButton buttonWithType:UIButtonTypeCustom];

[self.myButton setBackgroundImage:[UIImage imageNamed:@"unread.png"] forState:UIControlStateNormal];

或者

[self.myButton setImage:[UIImage imageNamed:@"unread.png"] forState:UIControlStateNormal];

而且,如果您检查单击按钮,请按照以下步骤操作

-(IBAction)checkForMsgCount: (id)sender
{
  UIButton *buttonObj = (UIButton*)sender;

[buttonObj setBackgroundImage:[UIImage imageNamed:@"unread.png"] forState:UIControlStateNormal];
}

这会更改响应该功能的按钮的背景图像。

于 2013-07-26T10:44:32.607 回答
1

请尝试下面的代码

if(unread>0){
    [badgeTitle setBackgroundImage:[UIImage imageNamed:@"unread.png"] forState:UIControlStateNormal];
    [badgeTitle setBackgroundImage:[UIImage imageNamed:@"unread.png"] forState :UIControlStateSelected];
}
else{
    [badgeTitle setBackgroundImage:[UIImage imageNamed:@"read.png"] forState:UIControlStateNormal];
    [badgeTitle setBackgroundImage:[UIImage imageNamed:@"read.png"] forState :UIControlStateSelected];
}
于 2013-07-26T10:37:14.270 回答
1
[YourBtn setImage:[UIImage imageNamed:@"your.png"] forState:UIControlStateNormal];

请尝试一下。

如果你的包裹里真的有这张照片,你也可以试试这个检查一下吗?

        NSString *bundlePath = [[NSBundle mainBundle] bundlePath];
        NSString *imagePath = [[NSString alloc] initWithFormat:@"%s/yourButton.png", [bundlePath  UTF8String]];


if ([[NSFileManager defaultManager] fileExistsAtPath:imagePath]) {
    NSLog(@"image exists");
}
else{
    NSlog(@"image Does Not Exist");
      }
于 2013-07-26T10:32:10.133 回答
0

首先检查按钮的 IBOutlet 连接:)

并在从网络服务获取数据后设置你的代码,即在获得价值之后unread

if(unread>0){
    [badgeTitle setBackgroundImage:[UIImage imageNamed:@"unread.png"] forState:UIControlStateNormal];
}
else{
    [badgeTitle setBackgroundImage:[UIImage imageNamed:@"read.png"] forState:UIControlStateNormal];
}
于 2013-07-26T10:29:01.760 回答
0

将 UIControlStateNormal 和 UIControlStateSelected 的背景图像设置为单独的行

if(unread>0){

   [badgeTitle setBackgroundImage:[UIImage imageNamed:@"unread.png"] UIControlStateNormal];

   [badgeTitle setBackgroundImage:[UIImage imageNamed:@"unread.png"] UIControlStateSelected];
} else {

   [badgeTitle setBackgroundImage:[UIImage imageNamed:@"read.png"] UIControlStateNormal];

   [badgeTitle setBackgroundImage:[UIImage imageNamed:@"read.png"] UIControlStateSelected];
}
于 2013-07-26T10:39:56.617 回答
0

设置背景图片后

[badgeTitle setNeedsLayout];
于 2014-06-10T14:36:42.207 回答
0
UIButton *btn = [[UIButton alloc]init];
    btn.frame = CGRectMake(50, 50, 100, 50);
    [btn setTitle:@"ok" forState:UIControlStateNormal];
    [btn setBackgroundImage:[UIImage imageNamed:@"icon.png"] forState:UIControlStateNormal];
    btn.backgroundColor=[UIColor blueColor];

我希望这对你有用....

于 2013-07-26T11:16:07.393 回答
0
[badgeTitle setBackgroundImage:[UIImage imageNamed:@"unread.png"] forState:UIControlStateNormal|UIControlStateSelected];

你是添加按钮图像UIControlStateNormal还是UIControlStateSelected

尝试

[badgeTitle setBackgroundImage:[UIImage imageNamed:@"unread.png"] forState:UIControlStateNormal];

查找图像是否存在并正确添加到包中以及名称是否正确

于 2013-07-26T10:29:56.773 回答