Appleのデフォルトのマスター/詳細プロジェクトテンプレートを使用していると想像してください。マスターはテーブルビューコントローラーであり、それをタップすると詳細ビューコントローラーが表示されます。
詳細ビューコントローラに表示される戻るボタンをカスタマイズしたいと思います。これは、戻るボタンの画像、画像の色、テキスト、テキストの色、およびフォントをカスタマイズする方法です。
画像、画像の色、テキストの色、またはフォントをグローバルに変更するには、View Controllerが作成される前に呼び出される場所に以下を配置します(たとえば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]
は、DetailViewControllerではなくUINavigationController内に含まれているため、ください。つまり、影響を受けるものをより細かく制御する場合は、UINavigationControllerをサブクラス化する必要があります。
特定の戻るボタンアイテムのテキストまたはフォント/色をカスタマイズするには、(DetailViewControllerではなく)MasterViewControllerでカスタマイズする必要があります。ボタンが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を設定しようとすると機能しないように見えるため、このプロパティに値を割り当てる前に設定する必要があります。