2014-02-25 83 views
1

我有一個UIButton,以編程方式創建並添加到UITableViewCell。當它被挖掘時更改UIButton的圖像

我已經成功設置了它,所以如果你點擊按鈕並保持按下,它會改變爲我爲「高亮狀態」設置的圖像,但這不夠好。

當用戶點擊按鈕時,我需要它完全更改爲新的圖像。如果用戶再次點擊該按鈕,我希望它改回到原始圖像。

我希望圖片每次點擊時都會改變。現在,如果他們點擊並持續按住它,它會發生變化,但只要完成按住它,它就會切換回原始圖像。

下面是代碼,我至今對我的按鈕:

UIImage *addFriendButtonImage = [UIImage imageNamed:@"SliderThumb-Normal-G"]; 

UIImage *addFriendButtonImageHighlighted = [UIImage imageNamed:@"SliderThumb-Normal"]; 

UIButton *addFriendButton = [[UIButton alloc]init]; 

addFriendButton.frame = CGRectMake(237, -10, 64, 64); 

[addFriendButton setImage:addFriendButtonImage forState:UIControlStateNormal]; 

[addFriendButton setImage:addFriendButtonImageHighlighted forState:UIControlStateHighlighted]; 

我也嘗試設置狀態的新形象,以「UIControlStateSelected」但所有的這會讓原始圖像有點暗。它甚至不會更改爲新圖像,並且如果您按下按鈕,它只會再次顯示效果。

回答

3

設置兩個圖像UIControlStateHighlightedUIControlStateSelected狀態:

[addFriendButton setImage:addFriendButtonImage forState:UIControlStateNormal]; 
[addFriendButton setImage:addFriendButtonImageHighlighted forState:UIControlStateHighlighted]; 
[addFriendButton setImage:addFriendButtonImageHighlighted forState:UIControlStateSelected]; 

然後聽UIControlEventTouchUpInside

[addFriendButton addTarget:self action:@selector(handleTouchUpInside:) forControlEvents:UIControlEventTouchUpInside]; 

然後更新所選狀態:

- (void)handleTouchUpInside:(UIButton *)sender { 
    sender.selected = !sender.selected; 
} 
+0

科裏謝謝你!我無法使用Mischa的答案,因爲我正在以編程方式做所有事情。你的答案是完美的。 – user3344977

0

想要的是每次用戶點擊addFriendButton(查找事件UIControlEventTouchUpInside)時,用[addFriendButton setImage:someImage forState:UIControlStateNormal];設置新圖像。

如果你願意,你仍然可以在[addFriendButton setImage:someImage_highlighted forState:UIControlStateHighlighted];

+0

我如何「尋找「事件UIControlEventTouchUpInside? – user3344977

+0

添加一個目標到''addFriendButton''。 像這樣:''[addFriendButton addTarget:自動作:@selector(addFriendButtonTouched :) forControlEvents:UIControlEventTouchUpInside];'' 「捕獲」 UIControlEventTouchUpInside事件中實現的方法: ' - (無效)addFriendButtonTouched:(的UIButton *)發件人 { }' – damirstuhec

0

分配適當的高亮圖像您需要爲您的按鈕的IBAction方法。如果您正在使用故事板來設計視圖控制器,請轉至助理編輯器中的相應視圖控制器(點擊Xcode窗口右上角的圖標Assistand Editor Icon),按CTRL +將一行從按鈕拖動到。這樣你的視圖控制器類的.h文件:和

CTRL+drag Storyboard

選擇Action進入一個名爲像touchUpInsideButton的方法。

create an action method

重複相同的步驟來創建你的按鈕的屬性。 (但選擇Outlet代替Action,讓您的按鈕名稱,如myButton)。現在,你應該在你的.h文件中有以下兩行:

@property (strong, nonatomic) IBOutlet UIButton *myButton; 
- (IBAction)touchUpInsideButton:(id)sender; 

現在到您的視圖控制器的.m文件。搜索新創建的操作方法- (IBAction)touchUpInsideButton:(id)sender並輸入以下代碼更改按鈕的圖像時,用戶點擊該按鈕:

- (IBAction)touchUpInsideButton:(id)sender { 
    UIImage *myImage = [UIImage imageNamed:@"myImageName"]; 
    [self.myButton setImage:myImage forState:UIControlStateNormal]; 
} 

(你可以把任何代碼,這種方法被執行的內部,每當用戶點擊按鈕) 如果你使用的是故事板,我會推薦這種方法。如果沒有,請參閱@ Corey的回覆。