想象一下,我们正在使用 Apple 的默认主/详细项目模板,其中 master 是一个表格视图控制器,点击它将显示详细视图控制器。
我们想要自定义出现在详细视图控制器中的后退按钮。这是如何自定义后退按钮的图像、图像颜色、文本、文本颜色和字体。
要全局更改图像、图像颜色、文本颜色或字体,请将以下内容放在创建任何视图控制器之前调用的位置(例如application:didFinishLaunchingWithOptions:
,这是一个好地方)。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
UINavigationBar* navigationBarAppearance = [UINavigationBar appearance];
// change the back button, using default tint color
navigationBarAppearance.backIndicatorImage = [UIImage imageNamed:@"back"];
navigationBarAppearance.backIndicatorTransitionMaskImage = [UIImage imageNamed:@"back"];
// change the back button, using the color inside the original image
navigationBarAppearance.backIndicatorImage = [[UIImage imageNamed:@"back"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
navigationBarAppearance.backIndicatorTransitionMaskImage = [UIImage imageNamed:@"back"];
// change the tint color of everything in a navigation bar
navigationBarAppearance.tintColor = [UIColor greenColor];
// change the font in all toolbar buttons
NSDictionary *barButtonTitleTextAttributes =
@{
NSFontAttributeName: [UIFont fontWithName:@"HelveticaNeue-Light" size:12.0],
NSForegroundColorAttributeName: [UIColor purpleColor]
};
[[UIBarButtonItem appearance] setTitleTextAttributes:barButtonTitleTextAttributes forState:UIControlStateNormal];
return YES;
}
注意,您可以appearanceWhenContainedIn:
更好地控制哪些视图控制器受这些更改的影响,但请记住,您不能通过[DetailViewController class]
,因为它包含在 UINavigationController 中,而不是您的 DetailViewController 中。这意味着如果您想更好地控制受影响的内容,则需要将 UINavigationController 子类化。
要自定义特定后退按钮项的文本或字体/颜色,您必须在MasterViewController(而不是 DetailViewController!)中进行。这似乎不直观,因为该按钮出现在 DetailViewController 上。但是,一旦您了解自定义它的方法是通过在 navigationItem 上设置属性,它就会开始变得更有意义。
- (void)viewDidLoad { // MASTER view controller
[super viewDidLoad];
UIBarButtonItem *buttonItem = [[UIBarButtonItem alloc] initWithTitle:@"Testing"
style:UIBarButtonItemStylePlain
target:nil
action:nil];
NSDictionary *barButtonTitleTextAttributes =
@{
NSFontAttributeName: [UIFont fontWithName:@"HelveticaNeue-Light" size:12.0],
NSForegroundColorAttributeName: [UIColor purpleColor]
};
[buttonItem setTitleTextAttributes:barButtonTitleTextAttributes forState:UIControlStateNormal];
self.navigationItem.backBarButtonItem = buttonItem;
}
注意:在设置 self.navigationItem.backBarButtonItem 之后尝试设置 titleTextAttributes 似乎不起作用,因此必须在将值分配给此属性之前设置它们。