2012-09-04 86 views
0

我已經實現了我的應用程序的一個單選按鈕,正是這樣的解決方案:iPhone。按鈕圖像不切換

http://www.developers-life.com/radio-buttons-in-iphone-application.html

但我checkboxButton的方法是這樣的:

- (IBAction)checkboxButton:(UIButton *)button{ 

    for (UIButton *but in self.arrayButtons) { 
     if (but == button) 
      [but setSelected:YES]; 
     else 
      [but setSelected:NO]; 
    } 
} 

我有兩個屬於同一單選按鈕組的按鈕。當我選擇其中一個按鈕時,它的圖像切換到切換的圖像。完善。問題是,當我選擇另一個時,它將不會選擇選擇狀態,並且正在顯示爲選定狀態的第一個繼續顯示爲選定狀態。

任何線索?

+0

請調試代碼...我認爲它總是執行相同的事情,,,沒有什麼改變.... –

+0

是的,我已調試。它沒有執行相同的操作。它是相應地選擇和取消選擇按鈕,但按鈕不顯示正確的狀態。 – SpaceDog

回答

0

在嘗試了所有解決方案並且都失敗之後,我嘗試了一個新的方法,它完美地工作。

的解決方案是本

- (IBAction)checkboxButton:(UIButton *)button{ 

    for (UIButton *but in self.arrayButtons) { 
     if (but == button) 
      [but setSelected:YES]; 
     else 
      [but setSelected:NO]; 
    } 
} 

切換到此

- (IBAction)checkboxButton:(UIButton *)button{ 

    for (UIButton *but in self.arrayButtons) { 
     if (but == button) 
      [but setImage:selectedImage forState:UIControlStateNormal]; 
     else 
      [but setImage:normalImage forState:UIControlStateNormal]; 
    } 
} 

顯然,改變按鈕的狀態也不會改變其圖像。至少沒有爲我工作。

0

你爲什麼用這麼多複雜,只是用下面做出選擇..

- (IBAction)checkboxButton:(UIButton *)button 
{ 
    button.selected = !button.selected; 
} 

,並確保您的按鈕圖像在廈門國際銀行爲每個國家根據需要設置。

+2

你的方法將不起作用,因爲當組中的一個按鈕被選中時,其他按鈕必須被取消選擇。這就是爲什麼我有一個循環。按鈕具有爲正常狀態和選定狀態設置的圖像。 – SpaceDog

+0

好吧..這是一個單一的按鈕,你有沒有嘗試過這個循環.. – vishy

0

爲了實現所需的功能,您必須在下一個運行循環中執行選擇按鈕。

所以,從「checkboxButton:」調用另一個方法。

做這樣的事情,

- (IBAction)checkboxButton:(UIButton *)button 
{ 
    [self performSelector:@selector(highlighButton:) withObject:button afterDelay:0.0]; 
} 

其中 「highlightButton:」 被定義爲:

-(void) highlighButton:(UIButton*)aButton 
{ 
    [aButton setHighlighted:YES]; 
    for (UIButton* button in self.arrayButtons) { 
     if (button != aButton) { 
      [button setHighlighted:NO]; 
     } 
    } 
} 
+0

@橡皮桶:這是否有幫助? –

+0

nope。根本沒有改變。 – SpaceDog

+0

你有沒有把選擇和取消選擇按鈕在不同的方法? –

7
for (UIButton *but in [Your_View subviews]) { 

if ([but isKindOfClass:[UIButton class]] && ![but isEqual:button]) { 

      [but setSelected:NO]; 

     } 

} 

if (!button.selected) { 

     button.selected = !button.selected; 
    } 
+0

這是將工作,並把它放在你的IBAction方法... –

+0

button.selected與sender.selected一樣。而不是發件人我寫了按鈕 –

0

我只是做了一些細微的調整,我只是測試了這一點,它的工作原理。

viewDidLoad中://確保所有按鈕具有相同的選擇器分配

[button1 addTarget:self action:@selector(checkboxButton:) forControlEvents:UIControlEventTouchUpInside]; 
[button2 addTarget:self action:@selector(checkboxButton:) forControlEvents:UIControlEventTouchUpInside]; 
[button3 addTarget:self action:@selector(checkboxButton:) forControlEvents:UIControlEventTouchUpInside]; 

然後,只需稍微修改循環掃描按鈕子視圖,而不是在任意的陣列的對象(應該是更準確)

- (IBAction)checkboxButton:(UIButton *)button{ 

    for (UIButton *but in self.view.subviews) {//Change "self.view" to what ever view you are adding these subviews to. 
     if (but == button){ 
      [but setSelected:YES]; 
     }else{ 
      [but setSelected:NO]; 
     } 
    } 
} 

請記住,您所分配的選定狀態圖像/文本在按鈕釋放前不會出現。在鬆開按鈕之前,按鈕處於高亮狀態。這只是一個註釋,所以你可以相應地設置它。

+0

我正在掃描一個數組,因爲它是無線電控制上使用的按鈕的數組。所以,這個數組只包含特定無線電控制中的按鈕。無論如何,我試過你的解決方案,但按鈕沒有正確改變。與我的問題中所述的結果相同。這很奇怪。 – SpaceDog

+0

@RubberDuck你確定你已經將你的按鈕選中狀態配置爲「選中」而不是「高亮」嗎? –