【问题标题】:UIButton - Keep text black when touchedUIButton - 触摸时保持文本黑色
【发布时间】:2011-09-10 00:08:58
【问题描述】:

我有一个带有背景图像和文本的 iPhone UIButton(自定义)。

触摸时,图像变暗(良好),但文本从设置的黑色变为白色。

如何使文本保持相同的黑色,以便在触摸按钮时,只有图像会改变颜色。

【问题讨论】:

    标签: iphone ios uibutton


    【解决方案1】:

    大多数时候,下面的行就可以了:

    [button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
    

    如果什么都没有发生,那么使用这个:

    [button setTitleColor:[UIColor blackColor] forState:(UIControlStateSelected | UIControlStateHighlighted | UIControlStateNormal)];
    

    或者这样可以解决问题:

    [button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
    [button setTitleColor:[UIColor blackColor] forState:UIControlStateHighlighted];
    [button setTitleColor:[UIColor blackColor] forState:UIControlStateSelected];
    

    请参阅下面的 cmets 了解此答案已被编辑/扩展为包括 2 条单独的行的原因。

    【讨论】:

    • 为什么会被接受?它行不通。按下按钮只会打开突出显示的状态。除非您明确指示按钮,否则按钮不会进入选定状态。
    • 这样,如果他明确指示按钮进入选中状态,颜色将保持黑色。或者,他可以继承 UIButton 并以 obj-c 最初应该具有的方式实现选定状态。 =p
    • 但这并没有解决最初的问题,即如何在他触摸按钮时保持文本不变色。如果按钮同时被选中突出显示,您的答案只会设置文本颜色。
    • Objective-C Operators and Expressions - Bitwise Operators。来自 UIControl.h UIControlStateHighlighted = 1 << 0UIControlStateSelected = 1 << 2 的定义。如果只有 1 并且同时设置了两个状态,则按位 OR 应该使它成为黑色的标题颜色。
    • 不,只有当 both 状态都被设置时它才会变黑。仅仅因为您使用按位 OR 来组合它们并不能赋予“状态 a OR 状态 b”的含义。本质上,这种情况下的按位 OR 对应于逻辑 AND。
    【解决方案2】:

    [button setTitleColor:[UIColor blackColor] forState:UIControlStateHighlighted]

    【讨论】:

      【解决方案3】:
      okButton.titleLabel.textColor = [UIColor redColor];
      [okButton addTarget:self action:@selector(isPressingForgetButton:) forControlEvents:UIControlEventTouchDown];
      [okButton addTarget:self action:@selector(didPressForgetButton:) forControlEvents:UIControlEventTouchUpInside];
      
      
      - (void) isPressingForgetButton:(id)sender
      {
          UIButton * bt = (UIButton *)sender;
          bt.titleLabel.textColor = [UIColor greenColor];
      }
      - (void) didPressForgetButton:(id)sender
      {
          UIButton * bt = (UIButton *)sender;
          bt.titleLabel.textColor = [UIColor redColor];
          [self gotoUnblockView];
      }
      

      【讨论】:

        猜你喜欢
        • 2014-09-05
        • 1970-01-01
        • 2014-09-10
        • 2010-12-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-03
        • 1970-01-01
        相关资源
        最近更新 更多