2012-08-05 56 views
0

我有兩個圖像的按鈕,一個正常,一個選定。而且我希望它的操作方式與按下圓形矩形按鈕時的作用相同,按鈕圖像會發生變化,如果您向外拖動,則圖像會變回正常狀態。這是我試過的。如何創建一個自定義按鈕,可以更改像圓角矩形的圖像

首先,我做了一個自定義視圖控制器,然後我在實現中添加了方法,它就是你在這裏看到的。我將這些方法吸引到我的2個按鈕,我的播放「按鈕」和「設置」按鈕。

- (IBAction)playButtonSelected:(UIButton *)sender { //this is for event touchDown 
     [sender setImage:[UIImage imageNamed:@"PlayButtonSelected.png"] forState:UIControlStateNormal]; 

} 


- (IBAction)playButtonNotSelected:(id)sender { //this is for event touchUpOutside 
    [sender setImage:[UIImage imageNamed:@"PlayButton.png"] forState:UIControlStateNormal]; 

} 



- (IBAction)settingsButtonSelected:(UIButton *)sender { //this is for event TouchDown 
     [sender setImage:[UIImage imageNamed:@"SettingsButtonSelected.png"] forState:UIControlStateNormal]; 
} 

- (IBAction)settingsButtonNotSelected:(id)sender { //this is for event touchUpOutside 
     [sender setImage:[UIImage imageNamed:@"SettingsButtons.png"] forState:UIControlStateNormal]; 
} 

嗯,我這樣做,它的工作很不錯,但有2個問題。

1st:如果我有20個按鈕,我必須有40個方法。這不是一個真正的問題,我只是認爲它應該考慮作爲一個潛在的問題。

第二:當我將按鈕拖到外面時,我希望它在用戶實際釋放手指之前切換到正常圖像。截至目前,圖像僅在手指被釋放時默認,而不是在手指移動一定距離時,以便touchUpInside命令不會運行。我想要這個,因爲它基本上是標準的。如果他願意,他還可以幫助用戶理解他可以收回他點擊按鈕的衝動行爲。

很酷,任何幫助都會有很多幫助!

回答

4

你只需要設置一次選擇正常圖像(當你創建實例的按鈕)

「國家」的說法,您可以爲不同狀態設置不同的圖像。你只需要一次寫這樣的代碼:

[playerButton setImage:[UIImage imageNamed:@"PlayButton.png"] forState:UIControlStateNormal]; 
[playerButton setImage:[UIImage imageNamed:@"PlayButtonSelected.png"] forState:UIControlStateSelected]; 

編輯:您還可以從屬性檢查器中做到這一點從Interface Builder的

Normal State Selected State

+1

我必須設置它爲highlited而不是選中,但謝謝你救了我的代碼! – bmende 2012-08-05 02:15:54

2

由於第二部分得到的回答是,我會回答第一部分,

假設您以編程方式創建按鈕,您可以爲每個按鈕分配一個標籤編號,併爲所有按鈕設置相同的選擇器方法。您可以通過識別選擇器方法中的標籤號來區分哪個按鈕被按下。與此類似:stackoverflow.com/a/11756445/1479411

如果您使用的是接口構建器,則可以將所有按鈕連接到同一個IBAction方法,並將標記號手動放置在每個按鈕的屬性檢查器中。再次,您可以通過IBAction方法中的標籤號來區分。

作爲附加說明,如果它們提供完全不同的功能,我將使用#define來標識按鈕。這可以減少以後的編碼錯誤。

#define SETTINGS 1 
#define PLAY  2 
#define FUNCTION1 3 
#define FUNCTION2 4 
... 
相關問題