2011-09-02 75 views
2

我把一個酒吧按鈕項放入一個酒吧,我用一個PNG(first.png)設置它,當我推它時我想改變它的PNG在「second.png 「iOS:更改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]; 

} 

回答

4

當前的應答者沒有意識到UIBarButtonItem不從UIButton的繼承,所以setImage:forState:肯定會工作。 UIBarButtonItems 不能爲設置爲不同的狀態。您可以,但是,利用這樣的事情(在UIBarItem docs聲明):

sender.image = [UIImage imageNamed:@"first.png"]; 
0

創建按鈕後,就在寫這幾行:

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]; 
+0

我有這個eror終止應用程序由於未捕獲的異常 'NSInvalidArgumentException',原因是:「 - [的UIBarButtonItem setImage:forState:]:無法識別的選擇器發送到實例0x6a3cc60' – CrazyDev

+0

不同的狀態僅爲'UIButton'聲明。使用自定義的'view == UIButton'創建'UIBarButtonItem'。然後調用這個方法到'UIButton'對象 – Nekto

+0

更新了我的答案。看它。 – Nekto

0

我不清楚爲什麼你在那裏有一個if塊。你不能初始化兩個狀態圖像作爲一次性初始化步驟嗎?即

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

事實上,如果您不需要以編程方式進行操作,可以在Interface Builder中完成。

+0

我有這個eror終止應用程序,由於未捕獲的異常'NSInvalidArgumentException',原因:' - [UIBarButtonItem setImage:forState:]:無法識別的選擇器發送到實例0x6a3cc60' – CrazyDev

+0

通常你會在你的視圖控制器的'viewDidLoad '。你從你的代碼片段複製了什麼方法? – Clafou