UIButton setImage无法正常工作?

时间:2011-08-16 12:30:22

标签: iphone objective-c uibutton uiimage

我有以下代码,当我调用此方法时,虽然资源中有图像,但它不会更改按钮的图像。

-(void)changeButton:(NSString*)button withURL:(NSString*)url {
    timetableURL = url;

    UIImage *btnImage;

    if ([button isEqual:@"Browser"]) {
        btnImage = [UIImage imageNamed:@"browser-button.png"];
        [safariBtn addTarget:self action:@selector(onSafariButtonPress:) forControlEvents:UIControlEventTouchUpInside];
    }
    else if ([button isEqual:@"Timetable"]) {
        btnImage = [UIImage imageNamed:@"browser-timetable.png"];  
        [safariBtn addTarget:self action:@selector(onTimetableButtonPress:) forControlEvents:UIControlEventTouchUpInside];
    }

    [safariBtn setImage:btnImage forState:UIControlStateNormal];
    [btnImage release];
}

已更新

仅供参考:这是一个UIToolbar的按钮。

5 个答案:

答案 0 :(得分:2)

试试这个,

[safariBtn setBackgroundImage:btnImage forState:UIControlStateNormal];

无需发布btnImage ...

答案 1 :(得分:2)

您的代码似乎有些问题:

[btnImage release] 您已使用自动释放创建该图像,您不对其发布负责。这很可能最终会发生奇怪的事情,即你遇到的事情。

你确定btnImage在if语句之后有内容吗?是否有可能按钮不等于@“浏览器”或@“时间表”?

另外,请确保按钮处于正常状态。

干杯

答案 2 :(得分:0)

我认为这应该对你有帮助......

    [safariBtn setImage:[UIImage imageNamed:@"browser-button.png"] forState:UIControlStateNormal];

答案 3 :(得分:0)

更改

[button isEqual:@"Browser"]

[button isEqualToString:@"Browser"]

isEqual正在测试对象相等性,而不是字符串相等性。

编辑:好的,你说你的按钮在工具栏里面。在这种情况下,我假设您已将其作为自定义视图添加到UIBarbuttonItem?您需要浏览条形按钮项并在条形按钮项的自定义视图上设置图像属性,我认为(虽然我不确定)一旦您将按钮添加为自定义视图,条形按钮项使它成为自己的副本,所以你不再通过safariBtn与它交谈。

您可以通过

访问工具栏项目
for (UIBarButtonItem *barItem in self.toolbar.items)

假设此代码位于viewController中。然后,您可以通过barItem.customView

访问您的safariBtn

答案 4 :(得分:0)

可能会对您有所帮助:设置创建它的按钮的标题,然后控制它是否等于标题。

[safariBtn setTitle:@"Safari" forState:UIControlStateNormal];

然后控制

-(void)changeButton:(NSString*)button withURL:(NSString*)url {
timetableURL = url;

UIImage *btnImage;

if ([button titleForState:UIControlStateNormal] isEqualToString:@"Safari"]) {
    btnImage = [UIImage imageNamed:@"browser-button.png"];
    [safariBtn addTarget:self action:@selector(onSafariButtonPress:) forControlEvents:UIControlEventTouchUpInside];
}
else if ([button titleForState:UIControlStateNormal] isEqualToString:@"Timetable"]) {
    btnImage = [UIImage imageNamed:@"browser-timetable.png"];  
    [safariBtn addTarget:self action:@selector(onTimetableButtonPress:) forControlEvents:UIControlEventTouchUpInside];
}

[safariBtn setImage:btnImage forState:UIControlStateNormal];
[btnImage release];

}