想象一下,我们正在使用Apple的默认主/详细项目模板,其中master是一个表视图控制器,点击它会显示详细视图控制器。
我们要自定义显示在详细视图控制器中的后退按钮。这是自定义后退按钮的图像,图像颜色,文本,文本颜色和字体的方法。
要全局更改图像,图像颜色,文本颜色或字体,请将以下内容放置在创建任何视图控制器之前调用的位置(例如application:didFinishLaunchingWithOptions:
,一个好地方)。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
UINavigationBar* navigationBarAppearance = [UINavigationBar appearance];
navigationBarAppearance.backIndicatorImage = [UIImage imageNamed:@"back"];
navigationBarAppearance.backIndicatorTransitionMaskImage = [UIImage imageNamed:@"back"];
navigationBarAppearance.backIndicatorImage = [[UIImage imageNamed:@"back"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
navigationBarAppearance.backIndicatorTransitionMaskImage = [UIImage imageNamed:@"back"];
navigationBarAppearance.tintColor = [UIColor greenColor];
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 {
[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似乎不起作用,因此必须在将值分配给此属性之前进行设置。