2013-02-22 64 views
1

我試圖找到這樣做的最佳方法。我有一個視圖控制器上的5個自定義按鈕,我試圖讓按鈕保持突出顯示,如果它被點擊。我知道如何做到這一點,但我試圖只允許1個按鈕一次突出顯示。因此,如果用戶點擊某個按鈕並突出顯示該按鈕,但點擊另一個按鈕,則最近點擊的按鈕將保持突出顯示,並且前一個按鈕不會亮起。什麼是實現這一目標的最佳方式?的iOS:設置按鈕按下的狀態

+0

你需要算法中或完整的代碼? – 2013-02-22 15:35:15

+0

將當前按鈕存儲在屬性中,並在選擇新屬性時取消選擇它? – Kevin 2013-02-22 15:38:14

+0

我不相信有可能改變Xcode中按鈕**的行爲。**儘管如此,在iOS應用程序中這樣做**當然是可以的。 – 2013-02-22 15:38:34

回答

3

你應該保留所有按鈕的參考(例如,如果使用IB,有像@property (nonatomic, strong) IBOutlet UIButton *button1;您所有的按鈕在你的代碼的鏈接)。

然後所有的按鈕鏈接到同一方法上的按鈕的新聞。我會叫它buttonPressed

Impement這樣的:

- (IBAction)buttonPressed:(id)sender { 

    UIButton *buttonPressed = (UIButton*)sender; 
    NSArray *buttons = [NSArray arrayWithObjects:_button1, _button2, _button3, nil]; 
    bool buttonIsHighlighted = NO; 

    // Check if a button is already highlighted 
    for (UIButton *button in buttons) { 

     if (button.highlighted) { 

      buttonIsHighlighted = YES; 
     } 
    } 

    // If a button is highlighted, un-highlight all except the one pressed 
    // If no button is highlighted, just highlight the right one 
    if (buttonIsHighlighted) { 

     for (UIButton *button in buttons) { 

      if (buttonPressed == button) { 

       buttonIsHighlighted = YES; 

      } else { 

       button.highlighted = NO; 
      } 
     } 

    } else { 

     buttonPressed.highlighted = YES; 
    } 
} 

我不能對此進行測試代碼,但我敢肯定它應該工作。讓我知道是否有錯。

+0

謝謝..... ..... :) – Adi 2014-09-03 12:17:24

0

解決方案1: 將按鈕放在NSArray中,當用戶單擊按鈕時,檢查是否突出顯示了另一個按鈕。如果YES,請忽略它並突出顯示按下的那個。如果NO,直接高亮顯示按下的那個。

解決方案2: 您可以將突出顯示的按鈕保存在@interface@property中聲明的全局變量中。當用戶點擊新的高亮顯示之前。

+0

嗯,看起來像你的解決方案1是幾乎什麼我建議,哈哈。我不是真的抓住第二個嗎? – rdurand 2013-02-22 15:52:07