Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 禁用的按钮不更改中的图像_Ios_Objective C_Uibutton_Viewwillappear_Uicontrolstate - Fatal编程技术网

Ios 禁用的按钮不更改中的图像

Ios 禁用的按钮不更改中的图像,ios,objective-c,uibutton,viewwillappear,uicontrolstate,Ios,Objective C,Uibutton,Viewwillappear,Uicontrolstate,我有一个按钮,可以按下设置viewController。在该设置中,我有一个开关,可以反转原始视图上的所有颜色,这是我通过编程实现的反转。我制作了反转按钮图像来替换原始图像 当我返回到原始视图时,如果开关已翻转,我将调用该方法以反转视图。除两个禁用的按钮外,所有内容都会相应更改 开关值保存在默认设置下,这样用户可以退出应用程序,稍后再回来,并且仍然可以反转颜色。当viewDidLoad调用invert方法时,按钮变化很好,甚至显示为调整后显示为禁用 知道会发生什么吗 -(void)invert{

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

当我返回到原始视图时,如果开关已翻转,我将调用该方法以反转视图。除两个禁用的按钮外,所有内容都会相应更改

开关值保存在默认设置下,这样用户可以退出应用程序,稍后再回来,并且仍然可以反转颜色。当
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];
}

我认为您在应用图像之前禁用了停止按钮播放按钮。而且您正在为
ui按钮
normal
UIControlState
应用
UIImage
。我建议做以下代码更改

改变这个

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

简而言之,您必须将
ui按钮设置为禁用状态

有关更多参考,请查看此问题的答案


如果根据
ui按钮的状态设置
ui图像
,则在要反转
ui图像
的功能中,只需处理
ui按钮的状态
,它就会自动更改图像

问题似乎是图像没有自动更新,您需要重置
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;

谢谢你的帮助。以下是我根据A-Live的答案得出的答案

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

[self.playButton setEnabled:YES];
[self.playButton setImage:[UIImage imageNamed:@"playinverted"]forState:UIControlStateNormal];
[self.playButton setEnabled:NO];
尝试使用:

theButton.adjustsImageWhenDisabled = false

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

播放反转图像应为状态uicontrol状态正常而不是uicontrol状态禁用。Yes@pawan.its MScottWaller选择他必须应用的图像和位置。我们的任务是引导他。播放反转图像被禁用,因为用户尚未选择文件。当用户选择一个文件时,它将被启用。您是否总是禁用带有反转图像的按钮(代码看起来像您这样)?在这种情况下,使用
UIControlStateDisabled
的解决方案会更好,因为您只需设置一次图像。不幸的是,如果我将其设置为UIControlStateDisabled,则按钮没有禁用状态。它不是轻的,比如低阿尔法。如果我按上面的方法操作,应用程序会记得禁用按钮并给它一个亮起的状态。这是iOS 7引入的一个bug。如果在禁用按钮时设置图像。什么也没发生。
theButton.adjustsImageWhenDisabled = false