【问题标题】:Disabled buttons not changing image in禁用按钮不更改图像
【发布时间】:2014-05-12 12:27:56
【问题描述】:

我有一个按钮可以推到设置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];
}

【问题讨论】:

    标签: ios objective-c uibutton viewwillappear uicontrolstate


    【解决方案1】:

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

    【讨论】:

    • 确实如此。这是 iOS 7 中引入的错误。如果您在禁用按钮时设置图像。什么都没有发生。
    【解决方案2】:

    我认为您在应用图像之前禁用了 stopButtonplayButton。而且您正在为UIButton 普通UIControlState 申请UIImage。我建议做以下代码更改

    改变这个

    //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

    如果你根据UIButton的状态设置UIImages,那么在你想要反转UIImage的函数中,你只需要处理UIButton的状态就可以了将自动更改图像。

    【讨论】:

    • playinverted 图像应该用于状态 UIControlStateNormal 而不是 UIControlStateDisabled。
    • 是的@pawan.its MScottWaller 选择他必须应用的图像和位置。我们的任务是引导他。
    • 播放反转图像被禁用,因为用户尚未选择文件。当用户选择一个文件时,它就会被启用。
    【解决方案3】:

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

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

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

    【讨论】:

    • 您是否总是禁用带有倒置图像的按钮(代码看起来像您这样做)?在这种情况下,UIControlStateDisabled 的解决方案会更好,因为您只需设置一次图像。
    • 不幸的是,如果我将其设置为 UIControlStateDisabled,则该按钮没有禁用状态。例如,它不轻,具有低 alpha。如果我按照上面的方式进行操作,应用程序会记住禁用按钮并使其处于点亮状态。
    【解决方案4】:

    尝试使用:

    theButton.adjustsImageWhenDisabled = false
    

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

    【讨论】:

      猜你喜欢
      • 2021-04-18
      • 2011-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-04
      • 2020-06-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多