3

UIAppearance を使用してすべての UIBarButtonItem をカスタマイズしています。

[[UIBarButtonItem appearance] setTintColor:[UIColor purpleColor]];

色の選択が悪いことを除けば、それはうまく機能します。

ここで、特定のスタイルのボタンが必要です。そこで、新しいクラスを作成します。それを と呼びましょうYellowDoneBarButtonItem
私もそれをカスタマイズしたいので、追加します:

[[YellowDoneBarButtonItem appearance] setTintColor:[UIColor yellowColor]];

残念ながら、最後の呼び出しが優先され... appearance] setTintColor:、すべてのボタンは、サブクラスであろうとなかろうと、最後に指定された色を採用します。

appearanceWhenContainedIn:同じナビゲーション バーに 2 つの異なるボタン スタイルがある場合があるため、使用できません。

all or nothingUIAppearanceよりも選択的に使用する方法はありますか?

ドキュメントは次のように述べています。

どのビュー階層でも、最も外側の外観プロキシが優先されます。特異性 (チェーンの深さ) がタイブレーカーです。つまり、appearwhenWhenContainedIn: の包含ステートメントは、半順序として扱われます。具体的な順序付け (実際のサブビュー階層) が与えられると、UIKit は、ウィンドウから実際の階層を読み取るときに、最初に一意に一致する部分的な順序付けを選択します。

この事実をここで必要なものに曲げるトリックはありますか?

4

1 に答える 1

2

インスタンス化された実際のボタンは、UIButton の (プライベート) サブクラスである UINavigationButton のようです。これは、UIBarButtonItem の外観サブクラスがキャッチオールである理由を説明している可能性があります。

私自身は、UIButton をカスタム ビューとして使用して、必要な外観を取得しています。これらは、UIAppearance を使用して簡単にオーバーライドできます。

于 2013-08-01T10:07:14.320 に答える