2014-05-12 35 views
1

我有一個按鈕,它會將其設置爲viewController。在該設置viewController我有一個開關反轉原始視圖上的所有顏色,這是我以編程方式完成的反轉。我製作了倒置的按鈕圖像來替換原始圖像。已禁用的按鈕不會更改圖像

當我回到原始視圖時,我有viewWillAppear調用方法來反轉,如果交換機已翻轉。除了兩個禁用按鈕外,所有內容都會相應更改

切換值保存在默認設置下,以便用戶可以退出應用程序,稍後再回來,仍然有顏色倒置。當viewDidLoad調用翻轉方法時,按鈕更改得很好,甚至顯示調整後顯示它們被禁用。

任何想法可能會發生什麼?

-(void)invert{ 

self.view.backgroundColor = [UIColor blackColor]; 

//Buttons 
[self.stopButton setImage:[UIImage imageNamed:@"stopinverted"] 
       forState:UIControlStateNormal]; 
[self.playButton setImage:[UIImage imageNamed:@"playinverted"] 
       forState:UIControlStateNormal]; 
} 

-(void)viewWillAppear:(BOOL)animated{ 

    _inverted = 
     [[NSUserDefaults standardUserDefaults] boolForKey:@"isInvertedOn"]; 
    [[NSUserDefaults standardUserDefaults] synchronize]; 

    if(_inverted){ 
     [self invert]; 
    } else { 
     [self unInvert]; 
    } 
    [super viewWillAppear:(BOOL)animated]; 
} 

回答

1

我認爲應用映像之前要禁用STOPBUTTON爲playButton。並且您還正在申請UIImageUIButton正常UIControlState。我建議做下面的代碼改變

更改此

//Buttons 
[self.stopButton setImage:[UIImage imageNamed:@"stopinverted"] 
       forState:UIControlStateNormal]; 
[self.playButton setImage:[UIImage imageNamed:@"playinverted"] 
       forState:UIControlStateNormal]; 

//Buttons 
[self.stopButton setImage:[UIImage imageNamed:@"stopinverted"] 
       forState:UIControlStateDisabled];   
[self.playButton setImage:[UIImage imageNamed:@"playinverted"] 
       forState:UIControlStateDisabled]; 

總之你必須設置禁用狀態UIButtonUIImages

更多參考看看這個問題回答Xcode: set image on button only for default state, not also selected

如果您按照您要在其中反轉UIImage的功能UIButton那麼國家規定的UIImages,你只需要處理UIButton的狀態,它會自動更改圖像。

+0

playinverted圖像應該爲狀態UIControlStateNormal而不是UIControlStateDisabled。 – Pawan

+0

是@ pawan.its MScottWaller選擇他必須應用哪個圖像以及在哪裏。我們的任務是引導他。 – svrushal

+0

playinverted圖像被禁用,因爲用戶還沒有選擇文件。當用戶選擇文件時,它變爲啓用。 – MScottWaller

2

這個問題似乎是,圖像不會自動更新,則需要重新設置enabled值,使其工作:

[self.stopButton setImage:[UIImage imageNamed:@"stopinverted"] 
       forState:UIControlStateNormal]; 
self.stopButton.enabled = ! self.stopButton.enabled; 
self.stopButton.enabled = ! self.stopButton.enabled; 

[self.playButton setImage:[UIImage imageNamed:@"playinverted"] 
       forState:UIControlStateNormal]; 
self.playButton.enabled = ! self.playButton.enabled; 
self.playButton.enabled = ! self.playButton.enabled; 
+0

確實。這是iOS 7引入的錯誤。如果在禁用按鈕時設置圖像。什麼都沒發生。 –

0

感謝您的幫助。這是我從A-Live的答案中得出的答案。

首先,我必須將按鈕設置爲啓用,然後設置圖像,然後再次禁用所有在同一方法中的按鈕。這已經解決了我的問題。

[self.playButton setEnabled:YES]; 
[self.playButton setImage:[UIImage imageNamed:@"playinverted"]forState:UIControlStateNormal]; 
[self.playButton setEnabled:NO]; 
+0

你是否總是禁用倒置圖像的按鈕(代碼看起來像你)?在這種情況下,使用「UIControlStateDisabled」的解決方案會更好,因爲您只需設置一次圖像。 –

+0

不幸的是,如果我將它設置爲UIControlStateDisabled,則該按鈕不具有禁用狀態。例如,它不輕,具有較低的阿爾法。如果我按照上述方式進行操作,則應用程序會記住禁用該按鈕並將其設爲減弱狀態。 – MScottWaller