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]
, DetailViewController가 아닌 UINavigationController 내부에 포함되어 있으므로 전달할 수 없습니다 . 즉, 영향을받는 항목을 더 많이 제어하려면 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를 설정하려고하면 작동하지 않는 것 같으므로이 속성에 값을 할당하기 전에 설정해야합니다.