web-dev-qa-db-ja.com

カスタムUIButtonを押したままにすると、濃い灰色のハイライトの色が変わりますか?

カスタムUIButtonがあります。これは、クラウド、透明な白黒.pngファイルであり、ダウン状態ではなく、1つの画像のみです。指をタップして保持すると、濃い灰色に変わります。私はその濃い灰色をもう少し抑圧的なものに変えようとしています。ボタンは、タブバー、ツールバー、またはナビゲーションコントローラーではなく、ビューで開いています。

私はすでにtintColorを設定しようとしました(ドキュメンテーションは、いくつかの種類のボタンにのみ適していることを教えてくれます)。

また、ハイライトの色、デフォルトの状態などに関連して、Interface Builderで見つけることができるものすべてを変更しようとしました。何も違いはありませんでした。

ボタンの画像をUIControlStateHighlighted状態に設定しようとしましたが、それでも指をかざすと濃い灰色のオーバーレイが表示されます。

その色を変更するにはどうすればよいですか?ここでSOで他の多くの問題を調べましたが、私に役立つソリューションを見つけることができませんでした。どんな助けも大歓迎です!

編集:UIImageのカテゴリを使用して問題を解決し、CoreGraphicsを使用して提供されたUIImageに色合いを適用するメソッドを追加しました。次に、その画像をハイライトとして設定しましたが、すべてうまくいきました。色を変更するために多くのフープラAppleは私たちに変更を許可するべきでしたが、ラビを見てください。

33
Luke

UIControlStateHighlighted状態にカスタムイメージを設定したと言いました。このshouldはデフォルトの動作を無効にします。

それでも問題がある場合は、adjustsImageWhenHighlightedプロパティをNOに設定してこの効果を無効にし、必要なカスタム効果を使用できます。

65
Mike Weller

AdjustsImageWhenHighlighted = NOが機能しない場合、Button-TypeをCustom(IBまたはプログラムで)に設定します。

デフォルトのボタンタイプ:システム、強調表示されたボタンの動作を変更します。

34
Greg Leszek

スウィフト3:

myButton.adjustsImageWhenHighlighted = false
6

あなたはそれを行うカスタムボタンを書くことができます

class ActionButton: UIButton {

  var originalBackgroundColor: UIColor!

  override var backgroundColor: UIColor? {
    didSet {
      if originalBackgroundColor == nil {
        originalBackgroundColor = backgroundColor
      }
    }
  }

  override var isHighlighted: Bool {
    didSet {
      guard let originalBackgroundColor = originalBackgroundColor else {
        return
      }

      backgroundColor = isHighlighted ? originalBackgroundColor.darken() : originalBackgroundColor
    }
  }
1
onmyway133

ボタンが押されるたびに灰色で強調表示されていたときに、カスタムUIButtonで同様の問題が発生していました。 UIButtonをサブクラス化することでこの問題を解決し、実装では単一のメソッド(void)setHighlighted:メソッドをオーバーライドして空のままにしました。

- (void)setHighlighted:(BOOL)highlighted
{
   // Leave empty to prevent super from doing whatever
   // that it is doing to show the grey highlight.
}

メソッドで何もしていなかったので、それはどんな種類の強調表示も止めました。強調表示効果を削除するだけの場合は、より良いアプローチです。

したがって、コードでUIButtonのサブクラスを作成し、setHighlightedメソッドをオーバーライドしてから、カスタムボタンをこのカスタムクラスのサブクラスにします。

1
Raz