2012-11-21 82 views
0

我在VC這樣更改objective-c中按鈕的背景圖像?

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

UITableView細胞已經一個UIButton這我slideAction

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

但事與願違幹活發現this聯繫,但並沒有幫助。 任何建議或示例,將不勝感激。

+3

什麼不行?沒有圖像可見嗎?或者它不會更改爲arrow_down.png?你確定slideAction被執行嗎? –

+0

「沒有工作」 - 更確切地說? – 2012-11-21 11:48:56

+0

arrowBtnUp定義和/或存儲在哪裏以及如何將其放入單元格?它僅在一個單元中可見嗎? –

回答

2

您的代碼應該work.Anyways改變你這樣的代碼,並嘗試

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

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

,並確保你在你的應用程序捆綁

+0

感謝它的工作,你能解釋我的代碼有什麼問題嗎? – Blios

+0

即時通訊不知道,但你必須已經在多個單元格中添加了arrowBtnUp。如果你可以發佈你的tableview委託方法代碼,那麼我將能夠找出究竟出了什麼問題 –

+0

問題是你在某處定義了arrowBtnUp。如您所說,可能在.h文件中。但是哪一個?爲了complile它,你必須有它在你的委託,通常是tableViewController。 (動作在哪裏)但是我想你永遠都不會正確設置變量的值。如果你有很多單元格顯示這個按鈕是不可能的,因爲同一個(單獨的)UIView對象一次不能在兩個單元格中。你的動作(slideAction :)確實傳遞了被按下的UIControl的id。因此,您可以正確訪問它。 –

3

問題已經arrow_down.png你是重用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]; 
} 
+0

+1爲您解釋,謝謝! – Blios

+0

@Blios:高興:) –

0

背景圖像比在按鈕上的圖標不同。試試這個:

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

如果你試圖在觸摸後改變按鈕圖像,你應該使用UIButton的控制狀態。你可以爲每個「狀態」分配一個背景圖像,並讓UIButton決定顯示哪一個。

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

無需在您的slideAction:target方法中手動切換背景圖像。

1

如果您嘗試在觸摸後更改按鈕圖像,則應使用UIButton的控件狀態。你可以爲每個「狀態」分配一個背景圖像,並讓UIButton決定顯示哪一個。