【问题标题】:How to disable the highlight control state of a UIButton?如何禁用 UIButton 的高亮控制状态?
【发布时间】:2011-01-16 14:58:43
【问题描述】:

我有一个 UIButton,当它被选中时,它不应该在被触摸时改变状态。 默认行为是它在被触摸时处于 UIControlStateHighlighted 状态,这让我很生气。

建议?

【问题讨论】:

  • 你应该打坐:-P

标签: ios cocoa-touch uibutton uikit uicontrol


【解决方案1】:

您的按钮必须将其buttonType 设置为自定义。

在 IB 中,您可以取消选中“突出显示调整图像”。

您可以通过编程方式使用theButton.adjustsImageWhenHighlighted = NO;

类似的选项也可用于“禁用”状态。

【讨论】:

  • 您有没有机会知道它的程序化版本是什么?现在,我通过将其禁用并将其装扮成被选中的方式来使其正常工作。
  • uibutton.adjustsImageWhenHighlighted = NO;
  • 还要确保按钮类型设置为自定义。 (正如 Mosib Asad 在另一个答案中提到的)
  • 太棒了!!!只是我错过了一个很小而明显的变化!!!我已将 UIButton 类类型设置为 MyCustomClass 但忘记更改此类型。所以它给出了未选择的按钮突出显示效果。再次感谢您。
【解决方案2】:

除了在 IB 中取消选中“突出显示调整图像”的上述答案外,请确保按钮类型设置为 CUSTOM。

【讨论】:

  • 这是缺少的部分:按钮类型 CUSTOM。谢谢!
  • 如果我想保留为系统 UIButton 怎么办?我不能删除高光调整图像吗?
【解决方案3】:

这对你有用:

[button setBackgroundImage:[UIImage imageNamed:@"button_image"] forState:UIControlStateNormal];
[button setBackgroundImage:[UIImage imageNamed:@"button_image_selected"] forState:UIControlStateSelected];
[button setBackgroundImage:[UIImage imageNamed:@"button_image_selected"] forState:UIControlStateSelected | UIControlStateHighlighted];

第三行是这里的诀窍......

这同样适用于设置图像/背景图像

【讨论】:

  • 这非常适合我。 UIButtonadjustsImageWhenHighlighted 属性似乎只影响背景图像。
  • 请注意,如果决定将图像分配给“禁用状态”,则不要调用 setBackgroundImage。相反,您应该执行以下操作 [button setImage:image forState:UIControlStateDisabled];另请注意,正如该线程中所述,adjustsImageWhenHighlighted UIButton 属性仅影响背景图像。
  • 如果您的目的是移除控件的高亮状态,而不仅仅是移除点击时的高亮效果,应该参考这个精彩的答案
【解决方案4】:
adjustsImageWhenHighlighted = NO;

【讨论】:

    【解决方案5】:
    button.adjustsImageWhenDisabled = NO;
    

    对于拥有自己的禁用按钮外观同样有用。

    【讨论】:

      【解决方案6】:

      根据按钮从默认状态到突出显示状态的变化,您可以调用几个方法将它们设置为您需要的状态。因此,如果图像发生变化,您可以这样做

      [myButton setImage:[myButton imageForState:UIControlStateNormal] forState:UIControlStateHighlighted];
      

      如果文字发生变化,你可以这样做

      [myButton setTitle:[myButton titleForState:UIControlStateNormal] forState:UIControlStateHighlighted];
      

      其他类似功能:

      - (void)setTitleColor:(UIColor *)color forState:(UIControlState)state

      - (void)setTitleShadowColor:(UIColor *)color forState:(UIControlState)state

      【讨论】:

      • setTitleColor 是我在 uibutton 的文本上禁用突出显示所需要的全部
      【解决方案7】:

      对于 Swifty 开发者 -

      yourButton.adjustsImageWhenHighlighted = false
      

      【讨论】:

        【解决方案8】:

        Swift 3+

        button.adjustsImageWhenHighlighted = false
        
        button.adjustsImageWhenDisabled = false
        

        【讨论】:

          【解决方案9】:

          好的,如果这对您有用,这是一个简单的解决方案,经过一周的努力,我终于想到只需为 TouchUpInside 或 TouchDown 的 IBAction 方法的第一行设置 highlight=NO 或其他作品。对我来说,TouchUpInside 很好。

          -(IBAction)selfDismiss:(id)sender {
          
              self.btnImage.highlighted = NO;
          
              NSLog(@"selfDismiss");
          
              etc, etc, etc.
          
          }
          

          【讨论】:

            【解决方案10】:

            使您的按钮类型 - “自定义” 和取消选中 - 突出显示调整图像和 你完成了。

            【讨论】:

              【解决方案11】:

              只有两件事:

              UIButton *btnTransparentComponent = [UIButton buttonWithType:UIButtonTypeCustom];
              btnTransparentComponent.adjustsImageWhenHighlighted = NO;
              

              【讨论】:

                【解决方案12】:

                我遇到了类似的问题,发现在界面生成器中“取消选中”清除图形内容解决了我的问题

                【讨论】:

                  【解决方案13】:

                  避免将UIButton的Line Break设置为Clip,改用标准的Truncate Middle

                  【讨论】:

                    猜你喜欢
                    • 2011-11-29
                    • 2012-08-17
                    • 2011-11-05
                    • 2019-06-18
                    • 2013-11-22
                    • 2010-09-27
                    • 1970-01-01
                    • 2022-12-13
                    • 1970-01-01
                    相关资源
                    最近更新 更多