カスタムUIButton
があります。これは、クラウド、透明な白黒.pngファイルであり、ダウン状態ではなく、1つの画像のみです。指をタップして保持すると、濃い灰色に変わります。私はその濃い灰色をもう少し抑圧的なものに変えようとしています。ボタンは、タブバー、ツールバー、またはナビゲーションコントローラーではなく、ビューで開いています。
私はすでにtintColor
を設定しようとしました(ドキュメンテーションは、いくつかの種類のボタンにのみ適していることを教えてくれます)。
また、ハイライトの色、デフォルトの状態などに関連して、Interface Builderで見つけることができるものすべてを変更しようとしました。何も違いはありませんでした。
ボタンの画像をUIControlStateHighlighted
状態に設定しようとしましたが、それでも指をかざすと濃い灰色のオーバーレイが表示されます。
その色を変更するにはどうすればよいですか?ここでSOで他の多くの問題を調べましたが、私に役立つソリューションを見つけることができませんでした。どんな助けも大歓迎です!
編集:UIImage
のカテゴリを使用して問題を解決し、CoreGraphics
を使用して提供されたUIImage
に色合いを適用するメソッドを追加しました。次に、その画像をハイライトとして設定しましたが、すべてうまくいきました。色を変更するために多くのフープラAppleは私たちに変更を許可するべきでしたが、ラビを見てください。
UIControlStateHighlighted
状態にカスタムイメージを設定したと言いました。このshouldはデフォルトの動作を無効にします。
それでも問題がある場合は、adjustsImageWhenHighlighted
プロパティをNO
に設定してこの効果を無効にし、必要なカスタム効果を使用できます。
AdjustsImageWhenHighlighted = NOが機能しない場合、Button-TypeをCustom(IBまたはプログラムで)に設定します。
デフォルトのボタンタイプ:システム、強調表示されたボタンの動作を変更します。
スウィフト3:
myButton.adjustsImageWhenHighlighted = false
あなたはそれを行うカスタムボタンを書くことができます
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
}
}
ボタンが押されるたびに灰色で強調表示されていたときに、カスタム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メソッドをオーバーライドしてから、カスタムボタンをこのカスタムクラスのサブクラスにします。