1. 程式人生 > >UIBarButtonItem關於全域性修改,區域性修改

UIBarButtonItem關於全域性修改,區域性修改

轉載於:http://www.cnblogs.com/Fc-ios/p/3794163.html

全域性修改:把所有UIBarButtonItem(或者一個控制元件)設為同一風格。

區域性修改:根據一定條件把一部分UIBarButtonItem(或者一個控制元件)設為同一風格

有時侯你想把導航條左側的所有按鈕的外觀,字型設定為同一風格,但你並不想把導航條左側按鈕外觀字型或背景全部用以下程式碼來更改,如果這樣改,有兩個UIBarButtonItem,你就要寫兩次,這樣寫程式碼過於贅餘,蘋果提供了更好的方法統一設定。

UIBarButtonItem *rightItem = [YBarButtonItem barButtonWithStyle:YBarButtonStyleRoundedRectangle  
                                                          Title:
@"Save" Action:@selector(saveButtonClicked) Delegate:self]; self.navigationItem.leftBarButtonItem = rightItem;
這裡就有個方法可以進行全域性或區域性的修改: !!!---本人開始用的時候也覺得奇怪,appearance方法怎麼可以設定讓所有同一種控制元件都為同一種風格,只能說是蘋果太強大,他封裝的了一個工具類UIAppearance可以統一設定控制元件的風格,當呼叫appearance方法時他會拿到相對應的控制元件(你用什麼控制元件呼叫appearace方法,他就會返回什麼控制元件),然後你可以設定統一主題(風格)---!!!
iOS5提供了一個比較強大的工具UIAppearance,可以輕鬆的統一你的介面,它提供如下兩個方法: + (id)appearance + (id)appearanceWhenContainedIn:(Class <>)ContainerClass,... 第一個方法是統一全部改,比如你設定UINavigationBar 的tintColor,你可以這樣寫:
[[UINavigationBar appearance] setTintColor:myColor];
/**
   這樣寫之後,所有的 UINavigationBar 的tintColor的顏色都為myColor
*/
第二個方法是當出現在某個類的出現時候才會改變:例如:
[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class
], [UIPopoverController class], nil] setTintColor:myPopoverNavBarColor];
1.修改背景: 
[[UIBarButtonItem appearance] setBackButtonBackgroundImage:leftButton  
                                                      forState:0  
                                                    barMetrics:UIBarMetricsDefault];  
 
2.修改字型,陰影,字型顏色 複製程式碼
NSDictionary* 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];  
  
   [[UIBarButtonItem appearance] setTitleTextAttributes:textAttributes forState:0];  
複製程式碼 3,修改UIBarButtonItem中文字的位置:
[[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(2, -1)  
                                                       forBarMetrics:UIBarMetricsDefault];