iOSの------テーマ設定 - >外観

簡単UIAppearanceは  何ですか?

  1.UIAppearanceは、プロトコルです

  @protocol UIAppearance <NSObject>

  只要遵守了UIAppearance协议的类,都可以设置主题:

しかし、それは、すべてのUIクラスによってサポートされていません。それは、クラスの次のリストサポート
  1.UIActivitiIndicatorView
  2.UIBarButtonItem
  3.UIBarItem
  4.UINavgationBar
  5.UIPopoverControll
  6.UIProgressView
  7.UISearchBar
  8.UISegmentControll 
  9.UISlider
  10.UISwitch
  11.UITabBar
  12.UITabBarItem
  13.UIToolBar
  14.UIView
  15を.UIViewController

注意トピック前提でオブジェクトのプロパティを設定します。  属性后面是否带有UI_APPEARANCE_SELECTOR方法

例如UIToolBar
它支持下列方法
@property(nonatomic,retain) UIColor *tintColor UI_APPEARANCE_SELECTOR;

- (void)setBackgroundImage:(UIImage *)backgroundImage forToolbarPosition:(UIToolbarPosition)topOrBottom barMetrics:(UIBarMetrics)barMetrics NS_AVAILABLE_IOS(5_0) UI_APPEARANCE_SELECTOR;

- (UIImage *)backgroundImageForToolbarPosition:(UIToolbarPosition)topOrBottom barMetrics:(UIBarMetrics)barMetrics NS_AVAILABLE_IOS(5_0) UI_APPEARANCE_SELECTOR;

- (void)setShadowImage:(UIImage *)shadowImage forToolbarPosition:(UIToolbarPosition)topOrBottom NS_AVAILABLE_IOS(6_0) UI_APPEARANCE_SELECTOR;

- (UIImage *)shadowImageForToolbarPosition:(UIToolbarPosition)topOrBottom NS_AVAILABLE_IOS(6_0) UI_APPEARANCE_SELECTOR;
  • 別の例:あなたは、テキストUITabBarItemのテーマを設定することができます
- (void)setTitleTextAttributes:(NSDictionary *)attributes forState:(UIControlState)state NS_AVAILABLE_IOS(5_0) UI_APPEARANCE_SELECTOR;
  • ケース:すべてのUITabBarItem、一般および選択でテキストの色を設定します。
.UIAppearance都有什么方法
+ (instancetype)appearance;
+ (instancetype)appearanceWhenContainedIn:(nullable Class <UIAppearanceContainer>)ContainerClass, ... NS_REQUIRES_NIL_TERMINATION NS_DEPRECATED_IOS(5_0, 9_0, "Use +appearanceWhenContainedInInstancesOfClasses: instead") __TVOS_PROHIBITED;
+ (instancetype)appearanceWhenContainedInInstancesOfClasses:(NSArray<Class <UIAppearanceContainer>> *)containerTypes NS_AVAILABLE_IOS(9_0);
+ (instancetype)appearanceForTraitCollection:(UITraitCollection *)trait NS_AVAILABLE_IOS(8_0);
+ (instancetype)appearanceForTraitCollection:(UITraitCollection *)trait whenContainedIn:(nullable Class <UIAppearanceContainer>)ContainerClass, ... NS_REQUIRES_NIL_TERMINATION NS_DEPRECATED_IOS(8_0, 9_0, "Use +appearanceForTraitCollection:whenContainedInInstancesOfClasses: instead") __TVOS_PROHIBITED;
+ (instancetype)appearanceForTraitCollection:(UITraitCollection *)trait whenContainedInInstancesOfClasses:(NSArray<Class <UIAppearanceContainer>> *)containerTypes NS_AVAILABLE_IOS(9_0);

 

 

プロパティを発揮しながら、1コントロールの特定のタイプを持っています

[[UIButton appearance] setBackgroundColor:[UIColor blackColor]];
[[UIButton appearance] setTitle:@"呵呵哒" forState:UIControlStateNormal];

2.コントロールの特定の種類は、実現されることがあり、一方、別のコントロールにプロパティ

[[UIButton appearanceWhenContainedInInstancesOfClasses:@[[UIView class]]] setTitleColor:[UIColor grayColor] forState:UIControlStateNormal];

この文は、----のUIViewのtitleColor UIButtonは、上記グレー表示されていることを意味し、上記
効果を、あなたは自分を試すことができます。

第三に、それが発効するかどうかのテーマの外観の使用は、それが取る効果

1 主题会生效:コントロールを追加した後、コントロールのトピックを設定し、
  • あなたがコントロールを追加すると、モーメントがテーマに基づいて、追加のチェックのテーマは、コントロールを設定=「テーマが有効になります
2 主题不会生效:最初のテーマを設定した後、コントロールを追加します
  • コントロールは、以前に動作しません追加したコントロールのテーマを設定した後に、追加されました
  • 場合は、テーマ、故障のテーマを設定し、コントロールを追加する前に、どのように我々はそれを解決するのですか?
3、どのようなテーマの障害を解決するために
    • シナリオ1:この時点ではテーマが役割を果たします」=テーマが決定されているので、ビューホストコントローラ制御はビューは、ウィンドウから削除され、その後、制御は、ウィンドウコントローラに追加されます。


       
      • 短所:貧しいスケーラビリティ、このテーマのコントロールは、すべてのコントローラを解決することはできませんので、
    • オプション2:その後、あなたが追加することができ、窓へのアプリケーションの配列を取得し、その後、削除ビューをトラバース
      • 注意:控件是否销毁,要看是否有强指针指向它

          

IV要約:
1、外観等の制御を設定するコンプライアンスUIAppearance契約制御
のみ外観属性セットを使用するように修正このマクロUI_APPEARANCE_SELECTORであること、2をこの関数は他の特性がなく、
3、外観はコントロールに表示されるように設定されています設定する前に、そうでない場合は無効である可能性があり

これは、次の2つのメソッドを提供します。

+ (id)appearance;

このメソッドは、すべてのあなたが書くことができ、例えばあなたがtintColor UINavigationBarを設定、変更統一です。

[[UINavigationBar appearance] setTintColor:myColor];
+ (id)appearanceWhenContainedIn:(Class <>)ContainerClass,...

この方法は、例えば、クラスを変更するように構成することができる:
それは書き込むことができ、中にUIBarButtonItem UINavigationBar、UIPopoverController、UITabbarに効果を設定します:

[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], [UIPopoverController class],[UITabbar class],nil] setTintColor:myColor];

注意:すべての初期化インタフェースの前に設定を開始、UIの外観設定のグローバル設定を最大限に活用を使用するか、それが失敗することがあります。

次のように詳細なUIの外観が変更さ:

背景1.ナビゲーションバーの変更
コードを次のとおりです。

UINavigationBar * appearance = [UINavigationBar appearance];
UIImage *navBgImg =[UIImage imageNamed:@"bgImage"]; [appearance setBackgroundImage:navBgImg forBarMetrics: UIBarMetricsDefault];

2.タブバー(UITabBar)
のコードは次のとおりです。

UITabBar *appearance = [UITabBar appearance];
//设置背景图片 [appearance setBackgroundImage:[UIImage imageNamed:@"bgImage"]]; //设置选择item的背景图片 UIImage * selectedImage =[[UIImage imageNamed:@"sliderImage"] resizableImageWithCapInsets:UIEdgeInsetsMake(2, 2, 2, 2)] ; [appearance setSelectionIndicatorImage:selectedImage];

3. Aは、対照(UISegmentControl)セグメント化され
たコードを以下の通りであります:

UISegmentedControl *appearance = [UISegmentedControl appearance];

//Segmenteg正常背景 [appearance setBackgroundImage:[UIImage imageNamed:@"image"] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; //Segmente选中背景 [appearance setBackgroundImage:[UIImage imageNamed:@"bgImage"] forState:UIControlStateSelected barMetrics:UIBarMetricsDefault]; /* Segmente左右都未选中时的分割线 BarMetrics表示navigation bar的状态,UIBarMetricsDefault 表示 portrait状态(44pixel height),UIBarMetricsLandscapePhone 表示landscape状态(32pixel height */ [appearance setDividerImage:[UIImage imageNamed:@"line"] forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; [appearance setDividerImage:[UIImage imageNamed:@"line"] forLeftSegmentState:UIControlStateSelected rightSegmentState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; [appearance setDividerImage:[UIImage imageNamed:@"line"] forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateSelected barMetrics:UIBarMetricsDefault]; //字体 NSDictionary *textAtt1 = @{ NSFontAttributeName: [UIFont systemFontOfSize:18], NSForegroundColorAttributeName: [UIColor blueColor], NSShadowAttributeName: [UIColor whiteColor]}; [appearance setTitleTextAttributes:textAtt1 forState:1]; NSDictionary *textAtt2 = @{ NSFontAttributeName: [UIFont systemFontOfSize:18], NSForegroundColorAttributeName: [UIColor blueColor], NSShadowAttributeName: [UIColor whiteColor]}; [appearance setTitleTextAttributes:textAtt2 forState:0];

4.UIBarbuttonの
注による矢印付きbackBarButtonを個別に設定する必要が前記UIBarbutton leftBarButton、rightBarButton及びbackBarButton、。barButtonの背景設定はios6.0以降で、戻るボタンは注意を払うように、ここで、ios5.0以降です!

コードは以下の通りであります:

//修改导航条上的UIBarButtonItem
UIBarButtonItem *appearance = [UIBarButtonItem appearanceWhenContainedIn: [UINavigationBar class], nil]; //设置导航栏的字体包括backBarButton和leftBarButton,rightBarButton的字体 NSDictionary *textAttributes = @{ NSFontAttributeName: [UIFont systemFontOfSize:18], NSForegroundColorAttributeName: [UIColor blueColor], NSShadowAttributeName: [UIColor whiteColor]}; [appearance setTitleTextAttributes:textAttributes forState:1]; //forState为0时为下正常状态,为1时为点击状态。 //修改leftBarButton,rightBarButton背景效果 [appearance setBackgroundImage:[UIImage imageNamed:@"image"] forState:UIControlStateNormal style:UIBarButtonItemStyleBordered barMetrics:UIBarMetricsDefault]; [appearance setBackgroundImage:[UIImage imageNamed:@"image"] forState:UIControlStateHighlighted style:UIBarButtonItemStyleBordered barMetrics:UIBarMetricsDefault]; //backBarButton需要单独设置背景效果,只能在ios6.0以后才能用 [appearance setBackButtonBackgroundImage:[UIImage imageNamed:@"bgImage"] forState:0 barMetrics:UIBarMetricsDefault]; [appearance setBackButtonBackgroundImage:[UIImage imageNamed:@"image"] forState:1 barMetrics:UIBarMetricsDefault]; [appearance setBackButtonTitlePositionAdjustment:UIOffsetMake(2, -1) forBarMetrics:UIBarMetricsDefault];

5.ツールバー(UIToolbar)

UIToolbar *appearance = [UIToolbar appearance];
//样式和背景二选一即可,看需求了 //样式(黑色半透明,不透明等)设置 [appearance setBarStyle:UIBarStyleBlackTranslucent]; //背景设置 [appearance setBackgroundImage:[UIImage imageNamed:@"bgImage"] forToolbarPosition:UIToolbarPositionAny barMetrics:UIBarMetricsDefault];

おすすめ

転載: www.cnblogs.com/lijinfu-software/p/11362897.html