2013-04-12 7 views
28

私は曇りのある透明な黒と白の.pngファイルで、ダウン状態もなく1つの画像しか持たないカスタムUIButtonを持っています。指をタップしたままにすると、暗い灰色に変わります。その暗い灰色をやや抑圧的なものに変えようとしています。ボタンは、タブバー、ツールバー、またはナビゲーションコントローラではなく、ビュー内で開いた状態で表示されます。カスタムUIButtonを押しているときに濃いグレーの色を変更しますか?

私は既にtintColorを設定しようとしています(参考になる文書は、「いくつかの」種類のボタンにしか適していません)。

また、色、デフォルト状態などを強調表示するためにInterface Builderで見つけられるものをすべて変更しようとしましたが、何も変わっていません。

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

どのように色を変更できますか?私はここで他にも数多くの問題を見てきてくれて、私にとってうまくいく解決策を見つけることができませんでした。どんな助けでも大歓迎です!

EDIT:私は提供UIImageに色合いを適用するCoreGraphicsを使用してメソッドを追加しますUIImageのカテゴリを使用して問題を解決しました。私はTHATイメージをハイライトとして設定し、すべてがうまくいきます。アップルが私たちに変えさせてくれるはずの色を変えるためには、フープラがたくさんあるように思えるが、しかし、それは本当だろうか。

答えて

55

UIControlStateHighlighted状態のカスタム画像を設定したとします。このである必要があります。

まだ問題が解決しない場合は、adjustsImageWhenHighlightedプロパティをNOに設定し、必要なカスタムエフェクトを使用してこのエフェクトを無効にすることができます。

+0

感謝をしてカスタムボタンを作成することができます。それが私にできるときに10分で受け入れるだろう.. – Luke

+0

私はちょうど編集を行いました: 'UIControlStateHighlighted'のためのカスタムイメージを実際に動作させるように設定してください。私はこれをもう一度やり、あなたが間違いを犯さなかったことを確認します。 –

+0

私はそれを設定していると思うが、適切に伸ばしていない、私は内部のテキストに基づいてイメージのサイズを変更していくつかのことをやっている。それは真ん中を白く見せますが、外側は暗い灰色ですので、イメージを推測することは元のスペースを埋めることではありません。私はそれをそれ自身に設定しているので、奇妙です。 – Luke

1

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

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

私はこの方法で何もしていなかったと強調し、任意のタイプを停止したこと。あなたがやろうとしていることがハイライト効果を取り除くことであれば、より良いアプローチです。

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

+0

おそらく、スーパーは色の変更をちょうど混乱させる以上のことをしています。これには注意が必要です。 – Yavin4

29

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

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

+0

私はそれを逃した方法を知らない。ありがとう。 –

+0

あなたは私の人生を救った。 Interface BuilderのUIButtonのデフォルトのタイプは 'system'です。本当に奇妙な、ああ? –

3

スウィフト3:

myButton.adjustsImageWhenHighlighted = false 
0

あなたはそれを

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 
    } 
    } 
関連する問題