|
#import "UINavigationItem+KZAdditions.h" |
|
#import "Aspects.h" |
|
|
|
@import ObjectiveC.runtime; |
|
|
|
static void const *TitleTextAttributesKey = &TitleTextAttributesKey; |
|
@implementation UINavigationItem (UGCAdditions) |
|
|
|
- (NSDictionary *)kz_titleTextAttributes; |
|
{ |
|
return objc_getAssociatedObject(self, TitleTextAttributesKey); |
|
} |
|
|
|
- (void)setKz_titleTextAttributes:(NSDictionary *)titleTextAttributes; |
|
{ |
|
objc_setAssociatedObject(self, TitleTextAttributesKey, titleTextAttributes, OBJC_ASSOCIATION_COPY_NONATOMIC); |
|
} |
|
|
|
@end |
|
|
|
__attribute__((constructor)) static void __load() |
|
{ |
|
void (^setAttributes)(id, UIViewController *) = ^(id target, UIViewController *vc) { |
|
NSCParameterAssert([target isKindOfClass:UINavigationController.class]); |
|
UINavigationController *navigationController = target; |
|
navigationController.navigationBar.titleTextAttributes = vc.navigationItem.kz_titleTextAttributes; |
|
}; |
|
|
|
[UINavigationController aspect_hookSelector:@selector(pushViewController:animated:) withOptions:AspectPositionBefore usingBlock:^(id <AspectInfo> info, UIViewController *vc, BOOL _) { |
|
setAttributes(info.instance, vc); |
|
} error:nil]; |
|
|
|
[UINavigationController aspect_hookSelector:@selector(popViewControllerAnimated:) withOptions:AspectPositionBefore usingBlock:^(id <AspectInfo> info, BOOL _) { |
|
UINavigationController *navigationController = (UINavigationController *)info.instance; |
|
int index = (int)(navigationController.viewControllers.count - 2); |
|
if (index >= 0) { |
|
UIViewController *vc = navigationController.viewControllers[index]; |
|
setAttributes(navigationController, vc); |
|
} |
|
} error:nil]; |
|
|
|
[UINavigationController aspect_hookSelector:@selector(popToRootViewControllerAnimated:) withOptions:AspectPositionBefore usingBlock:^(id <AspectInfo> info, BOOL _) { |
|
UINavigationController *navigationController = (UINavigationController *)info.instance; |
|
setAttributes(navigationController, navigationController.viewControllers.firstObject); |
|
} error:nil]; |
|
|
|
[UINavigationController aspect_hookSelector:@selector(popToViewController:animated:) withOptions:AspectPositionBefore usingBlock:^(id <AspectInfo> info, UIViewController *vc, BOOL _) { |
|
setAttributes(info.instance, vc); |
|
} error:nil]; |
|
|
|
[UINavigationController aspect_hookSelector:@selector(setViewControllers:animated:) withOptions:AspectPositionBefore usingBlock:^(id <AspectInfo> info, NSArray *viewControllers, BOOL _) { |
|
int index = (int)(viewControllers.count - 1); |
|
if (index >= 0) { |
|
setAttributes(info.instance, viewControllers[index]); |
|
} |
|
} error:nil]; |
|
} |