2012-04-03 4 views
3

iOS 5のグローバルスタイルをUIAppearanceに設定しています。ここでは例です:ほとんどの場合UIAppearanceをスタイリングするときに、どのように特定のUIViewをターゲットにしますか?

[[UIbarButtonItem appearance] 
    setTtitletextAttributes:someStyle 
    forState:UIControlStateNormal 
]; 

それはよさそうだ:

enter image description here

しかし、世界的なスタイルは、ムービープレーヤーのように、醜い場合があります。ムービープレーヤーのために

enter image description here

、私はデフォルトの青色のボタンを持っていることを好むだろう。だから、私はどのようにバックボタンの外観だけではなく、完了ボタンの外観をターゲットにするのだろうか?私は、通常の表のセルとグループ化された表のセルをターゲットにすることで同様の問題があります。

+0

プレーヤーが表示される前と終了する前に+外観を呼び出すことができる方法はありますか? – CodaFi

+0

UIAppearenceプロキシがスタイリングに影響しないように、UIBButtonをそのクラスのcustomViewとして作成することができます。 –

答えて

-1

実際にプロキシを変更して、特定のビュー階層を対象にすることができます。つまり、カスタマイズするビューが特定のビューに含まれている場合、その外観を他のビューとは異なるように変更することができます。最初にグローバル(白)スタイルを設定してから、次のメソッドを呼び出して、ボタンがMPMoviePlayerControllerなどで表示されるときの外観をカスタマイズします。

[[UIBarButtonItem appearanceWhenContainedIn: 
     [MPMoviePlayerController class], nil] 
     setTitletextAttributes:someStyle 
     forState:UIControlStateNormal]; 

これが役立つかどうか教えてください。

+0

このメッセージで失敗します:***キャッチされていない例外 'NSInvalidArgumentException'のためアプリを終了します、理由: '*** MPMoviePlayerControllerがUIAppearanceContainerプロトコルに準拠していません' –

+0

十分に公正です。ドキュメントを見た後、UINavigationBar、UIButtonなどのUIAppearanceContainerプロトコルに実際に準拠したクラスを使用する必要があることがわかりました。しかし、同じ考えはまだ適用されています –

+0

メディアプレーヤーにそのアイデアを適用できない点を除いて。 http://openradar.appspot.com/11296843を参照してください。 – an0

6

UINavigationBarのカスタムサブクラスを使用する必要があります。それをMyNavigationBarとしましょう。

[[UIBarButtonItem appearanceWhenContainedIn:[MyNavigationBar class], nil] 
    setTintColor:[UIColor redColor]]; 

をし、それは、あなたのナビゲーションバーではなく、MPMoviePlayerControllerのナビゲーションバー内のボタンに影響します。そして、あなたはこれを行うことができます。

問題はもちろん、UINavigationControllerは、コードで作成すると、常にUINavigationBarという基本的なものを使用しています。しかし、ペンでペンを作成した場合は、ナビゲーションバー(ペン先のドキュメントのアウトライン内)をクリックして、アイデンティティインスペクタでバーのクラスを変更することができます。

+0

私はInterface Builderを使用していません。私のカスタムサブクラスを使用するアプリケーション全体のすべての 'navigationBar'を作るにはどうすればいいですか?私は明示的に 'navigationBar'を' alloc'しませんでした。 – JoJo

+0

私が言ったように、「UINavigationControllerはコードで作成すると、常に基本的なUINavigationBarを使用します。」これを変更するパブリックAPIはありません。私のソリューションを使用したい場合は、IBとやりとりする必要があります。心配しないで、それはかみ合わない。 –

+1

この回答は正しいものであり、唯一の回避策であるようです。ディランの方が間違っているので、元の質問者はこれを正しい答えとしてマークする必要があります。 – awolf

4

あなたのAppDelegateであなただけのフルスクリーンモードでの適切な黒いバーがあります

[[UINavigationBar appearanceWhenContainedIn:[UINavigationController class], nil] 
setBackgroundImage:[UIImage imageNamed:@"navback"] forBarMetrics:UIBarMetricsDefault]; 

ムービープレーヤーと

[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"navback"] 
            forBarMetrics:UIBarMetricsDefault]; 

を交換する場合。 iOS 5とiOS 6で動作します

関連する問題