1

我有一个按下设置的按钮viewController。在该设置上,viewController我有一个开关可以反转原始视图上的所有颜色,这是我以编程方式完成的反转。我制作了倒置按钮图像来替换原始图像。

当我返回原始视图时,viewWillAppear如果开关已翻转,我已调用方法来反转。除了两个禁用的按钮外,一切都会相应地发生变化。

开关值保存在默认设置下,以便用户可以退出应用程序并稍后返回,但颜色仍会反转。当viewDidLoad调用 invert 方法时,按钮改变得很好,它们甚至显示为已禁用。

知道会发生什么吗?

-(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];
}
4

4 回答 4

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;
于 2014-05-12T13:02:42.820 回答
1

我认为您在应用图像之前禁用了 stopButtonplayButton 。而且您正在UIImage申请UIButtonnormal 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];

简而言之,您必须设置UIButton UIImages为禁用状态。

如需更多参考,请查看此问题答案Xcode: set image on button only for default state, not also selected

如果在要反转的函数中UIImages根据then的状态设置,只需要处理状态,它就会自动改变图像。UIButtonUIImageUIButton

于 2014-05-12T12:47:20.187 回答
0

谢谢您的帮助。这是我想出的答案,灵感来自 A-Live 的答案。

首先,我必须将按钮设置为启用,然后设置图像,然后在同一方法中再次禁用按钮。这解决了我的问题。

[self.playButton setEnabled:YES];
[self.playButton setImage:[UIImage imageNamed:@"playinverted"]forState:UIControlStateNormal];
[self.playButton setEnabled:NO];
于 2014-05-12T14:06:29.490 回答
0

尝试使用:

theButton.adjustsImageWhenDisabled = false

这将使用您的自定义图像而不是默认的调光。

于 2019-04-17T21:42:57.040 回答