2012-04-03 40 views
0


我需要不同爲突出狀態圖像用於UIButton不同的圖像高亮顯示的UIButton狀態

我有幾行代碼:

- (IBAction)buttonPressed:(id)sender 
{ 
    UIImage *followImageHighlighted = [UIImage imageNamed:@"follow-hilite.png"]; 
    UIImage *unfollowImageHighlighted = [UIImage imageNamed:@"unfollow-hilite.png"]; 
    if ([sender isSelected]) { 
     // set this image for the next time the button will pressed 
     [sender setImage:unfollowImageHighlighted forState:UIControlStateHighlighted]; 
    } else { 
     // set this image for the next time the button will pressed 
     [sender setImage:followImageHighlighted forState:UIControlStateHighlighted]; 
    } 
} 

- (void)viewDidLoad 
{ 
    // ... 
    UIImage *followImage = [UIImage imageNamed:@"follow.png"]; 
    UIImage *unfollowImage = [UIImage imageNamed:@"unfollow.png"]; 
    [self.followButton setImage:followImage forState:UIControlStateNormal]; 
    [self.followButton setImage:unfollowImage forState:UIControlStateSelected]; 
} 

的問題是,每次我按下按鈕時,我看到了高亮顯示的圖像follow-hilite.png

無法更改道路上按鈕的突出顯示圖像嗎?

我認爲這是一個不好的限制,因爲當按鈕被選中(因此,「跟隨」),並且用戶按下它,他會看到默認圖像,然後當它觸摸圖像是選定狀態和時網絡操作完成,然後按鈕圖像正確切換到選定的一個。

想法?

編輯

- (IBAction)followButtonTapped:(id)sender 
{ 
    BOOL isFollowed = [sender isSelected]; 
    NSString *urlString = isFollowed ? kUnfollowURL : kFollowURL; 
    // operation [...] 
    [self.followButton setSelected:(isFollowed) ? NO : YES]; 
    self.user.followed = !isFollowed; 
} 

我更好地解釋這個問題:在默認狀態

  • 按鈕:黑色文本在白色背景
  • 處於選擇狀態
  • 按鈕:白色文字,黑色背景

如果ta沒有遵循rget用戶,按鈕處於默認狀態,如果我嘗試按下它,我會看到正確的高亮顯示的圖像。

但是,如果按照目標用戶並且按鈕處於選定狀態,如果我嘗試按下它(並按住手指),則會看到白色背景上帶有黑色文本的按鈕。這非常難看,這是我的問題。

+0

我不知道'[sender isSelected]'是什麼,但它只返回是。 – CodaFi 2012-04-03 21:52:55

+0

這是什麼意思:「如果目標用戶被跟蹤」? – danh 2012-04-04 00:18:21

+0

如果用戶視圖正在顯示,我跟着。 – 2012-04-04 00:22:01

回答

1

我已經解決了:

[myButton setImage:imageSelectedHover forState:(UIControlStateSelected | UIControlStateHighlighted)];

0

我想你需要嘗試修改重要的東西,並制定出你的變量之前投發件人的UIButton *,因爲發件人包括一個名爲-isSelected方法或屬性。試試這個:

- (IBAction)buttonPressed:(id)sender 
{ 
    UIImage *followImageHighlighted = [UIImage imageNamed:@"follow-hilite.png"]; 
    UIImage *unfollowImageHighlighted = [UIImage imageNamed:@"unfollow-hilite.png"]; 
    if ([self isSelected]) { 
     // set this image for the next time the button will pressed 
     [(UIButton*)sender setImage:unfollowImageHighlighted forState:UIControlStateHighlighted]; 
    } else { 
     // set this image for the next time the button will pressed 
     [(UIButton*)sender setImage:followImageHighlighted forState:UIControlStateHighlighted]; 
    } 
[self isSelected] = ![self isSelected]; 
} 
+0

演員陣容是正確的風格,但不會有所作爲。 – danh 2012-04-03 22:23:36

+0

他也沒有改變他的isSelected var,我認爲這是他的問題所在。這就是爲什麼我添加了最後一行。 – CodaFi 2012-04-03 22:24:38

+0

問題是,所選狀態(以及突出顯示的狀態)是根據觸發操作的控件事件來確定的。對於給定的控件事件,代碼將始終運行相同的路徑。 @Fred需要確定一個應用程序條件,這會使他想要更改圖像,然後在印刷機開始前進行更改。 – danh 2012-04-03 22:27:25

1

的IBAction爲是配置控制的尷尬(在最好的,或不可能)的地方。在您的應用中必須有一些條件觸發對不同高亮圖像的要求。檢測到該情況時配置按鈕。

使用「按下」回調來執行應用程序應該按下的任何操作。

+0

如何配置按鈕?條件是用戶觸摸按鈕內部。 – 2012-04-03 22:33:19

+0

我正在尋找使您想要擁有不同亮點圖像的條件。觸摸是使按鈕想要顯示_當前高亮圖像的原因。沒有你的幫助,按鈕將會這樣做。你想要做的是基於某些_application_條件事先設置正確的。 – danh 2012-04-03 22:42:16

+0

@dahn是的,但在我開始之前,我認爲這是iOS程序員的經典場景。但似乎沒有解決辦法。 – 2012-04-03 22:55:37

1

很高興它的工作原理。您可以通過更新申請條件解決它:self.user.followed。現在,爲了使它真正正確的,試試這個:

- (IBAction)followButtonTapped:(id)sender 
{ 
    NSString *urlString = self.user.followed? kUnfollowURL : kFollowURL; 
    // operation [...] 
    self.user.followed = !self.user.followed; 
} 

模型的狀態是這裏最重要的。該按鈕的選定狀態更像是一個布爾,它躺在你正在保存真實以下狀態的副本上。

+0

謝謝你的時間丹。 – 2012-04-04 11:12:00

相關問題