Hãy tưởng tượng chúng ta đang sử dụng mẫu dự án chính / chi tiết mặc định của Apple, trong đó cái chính là bộ điều khiển chế độ xem bảng và chạm vào nó sẽ hiển thị bộ điều khiển chế độ xem chi tiết.
Chúng tôi muốn tùy chỉnh nút quay lại xuất hiện trong bộ điều khiển chế độ xem chi tiết. Đây là cách tùy chỉnh hình ảnh , màu ảnh , chữ , màu chữ, phông chữ của nút quay lại.
Để thay đổi hình ảnh, màu hình ảnh, màu văn bản hoặc phông chữ trên toàn cầu, hãy đặt phần sau vào vị trí được gọi trước khi bất kỳ bộ điều khiển chế độ xem nào của bạn được tạo (ví dụ: application:didFinishLaunchingWithOptions:
là một nơi tốt).
- (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;
}
Lưu ý, bạn có thể sử dụng appearanceWhenContainedIn:
để có nhiều quyền kiểm soát hơn đối với bộ điều khiển chế độ xem nào bị ảnh hưởng bởi những thay đổi này, nhưng hãy nhớ rằng bạn không thể vượt qua [DetailViewController class]
, vì nó được chứa bên trong UINavigationController, không phải DetailViewController của bạn. Điều này có nghĩa là bạn sẽ cần phân lớp UINavigationController nếu bạn muốn kiểm soát nhiều hơn những gì bị ảnh hưởng.
Để tùy chỉnh văn bản hoặc phông chữ / màu sắc của một mục nút quay lại cụ thể, bạn phải làm như vậy trong MasterViewController (không phải DetailViewController!). Điều này có vẻ không trực quan vì nút xuất hiện trên DetailViewController. Tuy nhiên, một khi bạn hiểu rằng cách tùy chỉnh nó là bằng cách đặt một thuộc tính trên một navigationItem, thì nó bắt đầu có ý nghĩa hơn.
- (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;
}
Lưu ý: cố gắng đặt titleTextAttributes sau khi đặt self.navigationItem.backBarButtonItem dường như không hoạt động, vì vậy chúng phải được đặt trước khi bạn gán giá trị cho thuộc tính này.