IOS 5下強大的UI修改工具—— UIAppearance

來源:互聯網
上載者:User

              iOS5提供了一個比較強大的工具UIAppearance,可以輕鬆的統一你的介面,它提供如下兩個方法:

+ (id)appearance

+ (id)appearanceWhenContainedIn:(Class <>)ContainerClass,...

第一個方法是統一全部改,比如你設定UINavBar的tintColor,你可以這樣寫:[[UINavigationBar appearance] setTintColor:myColor];
第二個方法是當出現在某個類的出現時候才會改變:例如:

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


       另外其它的UI外觀修改如下:


       首先定義兩個值:

    //這樣方便下面多個UI介面設定,textAttributes:字型    id appearance;    NSDictionary *textAttributes = nil;

1.導航條

代碼如下:

    //導航條    {        appearance = [UINavigationBar appearance];        UIImage *navBackgroundImg =[UIImage imageNamed:@"background_nav"];                [appearance setBackgroundImage:navBackgroundImg forBarMetrics:UIBarMetricsDefault];    }

2.標籤欄(UITabbar)

代碼如下:

    //標籤欄    {        appearance = [UITabBar appearance];        UIImage *tabBarBackGroungImg =[UIImage imageNamed:@"tabbar_background"];        [appearance setBackgroundImage:tabBarBackGroungImg];                UIImage * selectionIndicatorImage =[[UIImage imageNamed:@"tabbar_slider"]resizableImageWithCapInsets:UIEdgeInsetsMake(4, 0, 0, 0)] ;        [appearance setSelectionIndicatorImage:selectionIndicatorImage];    }

3.分段控制項(UISegmentControl)

代碼如下:

    //Segmente未選中背景    {        //cap insets用來指定哪些地區是固定不變的,未制定的地區則會repeat        UIImage *segmentSelected = [[UIImage imageNamed:@"bg_o.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(5, 5, 5, 5)];                UIImage *segmentUnselected = [[UIImage imageNamed:@"bg.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(5, 5, 5, 5)];                UIImage *segmentSelectedUnselected = [UIImage imageNamed:@"line.png"] ;                UIImage *segUnselectedSelected = [UIImage imageNamed:@"line.png"] ;                UIImage *segmentUnselectedUnselected = [UIImage imageNamed:@"line.png"];                        appearance = [UISegmentedControl appearance];                [appearance setBackgroundImage:segmentUnselected                              forState:stateNormal                            barMetrics:UIBarMetricsDefault];                //Segmente選中背景        [appearance setBackgroundImage:segmentSelected                              forState:stateSelected                            barMetrics:UIBarMetricsDefault];                //Segmente左右都未選中時的分割線        //BarMetrics表示navigation bar的狀態,UIBarMetricsDefault 表示portrait狀態(44pixel height),UIBarMetricsLandscapePhone 表示landscape狀態(32pixel height)                [appearance setDividerImage:segmentUnselectedUnselected                forLeftSegmentState:stateNormal                  rightSegmentState:stateNormal                         barMetrics:UIBarMetricsDefault];                [appearance setDividerImage:segmentSelectedUnselected                forLeftSegmentState:stateSelected                  rightSegmentState:stateNormal                         barMetrics:UIBarMetricsDefault];                [appearance setDividerImage:segUnselectedSelected                forLeftSegmentState:stateNormal                  rightSegmentState:stateSelected                         barMetrics:UIBarMetricsDefault];                //字型        textAttributes = [NSDictionary dictionaryWithObjectsAndKeys:                          BAR_BUTTON_TITLE_SHADOW_COLOR,UITextAttributeTextColor,                          BAR_BUTTON_TITLE_FONT,UITextAttributeFont,                          BAR_BUTTON_TITLE_TEXT_COLOR,UITextAttributeTextShadowColor,                          [NSValue valueWithCGSize:CGSizeMake(1, 1)],UITextAttributeTextShadowOffset,                          nil];                [appearance setTitleTextAttributes:textAttributes forState:1];                textAttributes = [NSDictionary dictionaryWithObjectsAndKeys:                          BAR_BUTTON_TITLE_TEXT_COLOR,UITextAttributeTextColor,                          BAR_BUTTON_TITLE_FONT,UITextAttributeFont,                          BAR_BUTTON_TITLE_SHADOW_COLOR,UITextAttributeTextShadowColor,                          [NSValue valueWithCGSize:CGSizeMake(1, 1)],UITextAttributeTextShadowOffset,                          nil];                [appearance setTitleTextAttributes:textAttributes forState:0];    }

4.UIBarbutton

注意:UIBarbutton有leftBarButton,rightBarButton和backBarButton,其中backBarButton由於帶有箭頭,需要單獨設定。

barButton背景設定是ios6.0及以後的,而backbutton是ios5.0及以後的,這裡要注意!

代碼如下:

    //UIBarButtonItem    {        //只是修改導航條上的UIBarButtonItem        appearance = [UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil];        //backBarButton和leftBarButton,rightBarButton的字型同時設定        textAttributes = [NSDictionary dictionaryWithObjectsAndKeys:                          BAR_BUTTON_TITLE_TEXT_COLOR,UITextAttributeTextColor,                          BAR_BUTTON_TITLE_FONT,UITextAttributeFont,                          BAR_BUTTON_TITLE_SHADOW_COLOR,UITextAttributeTextShadowColor,                          [NSValue valueWithCGSize:CGSizeMake(1, 1)],UITextAttributeTextShadowOffset,                          nil];                [appearance setTitleTextAttributes:textAttributes forState:0];                textAttributes = [NSDictionary dictionaryWithObjectsAndKeys:                          BAR_BUTTON_TITLE_SHADOW_COLOR,UITextAttributeTextColor,                          BAR_BUTTON_TITLE_FONT,UITextAttributeFont,                          BAR_BUTTON_TITLE_TEXT_COLOR,UITextAttributeTextShadowColor,                          [NSValue valueWithCGSize:CGSizeMake(1, 1)],UITextAttributeTextShadowOffset,                          nil];                [appearance setTitleTextAttributes:textAttributes forState:1];                UIImage *leftButton = [[UIImage imageNamed:@"bgLeftButton.png"] stretchableImageWithLeftCapWidth:14 topCapHeight:0];                UIImage *normalButton = [[UIImage imageNamed:@"bgNormalButton.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 5, 0, 5)];                //leftBarButton,rightBarButton背景        [appearance setBackgroundImage:normalButton                              forState:UIControlStateNormal                                 style:UIBarButtonItemStyleBordered                            barMetrics:UIBarMetricsDefault];                [appearance setBackgroundImage:normalButton                              forState:UIControlStateHighlighted                                 style:UIBarButtonItemStyleBordered                            barMetrics:UIBarMetricsDefault];                //單獨設定backBarButton背景        [appearance setBackButtonBackgroundImage:leftButton                                        forState:0                                      barMetrics:UIBarMetricsDefault];                [appearance setBackButtonBackgroundImage:leftButton                                        forState:1                                      barMetrics:UIBarMetricsDefault];                [appearance setBackButtonTitlePositionAdjustment:UIOffsetMake(2, -1)                                           forBarMetrics:UIBarMetricsDefault];            }

5.工具列(UIToolbar)

代碼如下:

    //toolBar    {        appearance = [UIToolbar appearance];        //樣式和背景二選一即可,看需求了        //樣式(黑色半透明,不透明等)設定        [appearance setBarStyle:UIBarStyleBlackTranslucent];        //背景設定        [appearance setBackgroundImage:[UIImage imageNamed:@"background_nav.png"]                    forToolbarPosition:UIToolbarPositionAny barMetrics:UIBarMetricsDefault];    }

補充一個需要注意的地方:全域的設定最好在所有介面初始化前開始設定,否則可能失效。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.