iOS:更改工具栏按钮项中的png

iOS:更改工具栏按钮项中的png,ios,xcode,png,uibarbuttonitem,Ios,Xcode,Png,Uibarbuttonitem,我在tolbar中加入了一个bar按钮项,并将其设置为png(first.png),当我按下它时,我想在“second.png”中更改它的png 此代码无法正常工作: UIImage *first = [UIImage imageNamed:@"first.png"]; UIImage *second = [UIImage imageNamed:@"second.png"]; if ([sender isSelected]) { [sender setImage:first fo

我在tolbar中加入了一个bar按钮项,并将其设置为png(first.png),当我按下它时,我想在“second.png”中更改它的png

此代码无法正常工作:

UIImage *first = [UIImage imageNamed:@"first.png"];
UIImage *second = [UIImage imageNamed:@"second.png"];

if ([sender isSelected]) 
{  
    [sender setImage:first forState:UIControlStateNormal];  
    [sender setSelected:NO];  

}
else 
{     
    [sender setImage:second forState:UIControlStateSelected]; 
    [sender setSelected:YES];

}

只需在创建按钮后写入以下行:

UIImage *first = [UIImage imageNamed:@"first.png"];
UIImage *second = [UIImage imageNamed:@"second.png"];

[sender setImage:first forState:UIControlStateNormal];
[sender setImage:second forState:UIControlStateSelected]; 
您不需要if-else语句

更新:

CGRect myFrame;
UIButton *myButton = [[UIButton alloc] initWithFrame:myFrame];
[myButton setImage:[UIImage imageNamed:@"first.png"] forState:UIControlStateNormal];
[myButton setImage:[UIImage imageNamed:@"second.png"] forState:UIControlStateSelected];
UIBarButtonItem *barItem = [[UIBarButtonItem alloc] initWithCustomView:myButton];
[myButton release];

我不清楚你为什么在那里有一个if块。您不能一次性初始化两个状态映像吗?即

[sender setImage:[UIImage imageNamed:@"first.png"] forState:UIControlStateNormal];  
[sender setImage:[UIImage imageNamed:@"second.png"] forState:UIControlStateSelected]; 

事实上,如果您不需要以编程方式进行,这可能可以在Interface Builder中完成。

当前的回答者没有意识到,
UIBarButtonItem
不是从UIButton继承的,因此
setImage:forState:
肯定不起作用。无法为不同的状态设置UIBarButtonims。但是,您可以使用以下内容(在中声明):


由于未捕获的异常“NSInvalidArgumentException”,我有此eror终止应用程序,原因:“-[UIBarButtonim setImage:forState:]:发送到实例0x6a3cc60的未识别选择器”仅为
UIButton
声明了不同的状态。使用自定义
view==UIButton
创建
UIBarButtonItem
。然后将此方法调用到
UIButton
objectI由于未捕获的异常“NSInvalidArgumentException”,导致此eror终止应用程序,原因:'-[uiBarButtonim setImage:forState:::]:未识别的选择器发送到实例0x6a3cc60'通常,您会在视图控制器的
viewDidLoad
中进行此类初始化。您是通过什么方法复制代码段的?
sender.image = [UIImage imageNamed:@"first.png"];