I'm attempting to change my UIBarButtonItem
font. It looks good when ViewControllers load. But if I tap on the bar button, or swipe right as if to move to the previous ViewController (but then pull back to the current one), the font changes back to the system font. Here's what I'm setting in my AppDelegate:
NSDictionary* barButtonItemAttributes = @{NSFontAttributeName: [UIFont fontWithName:@"SourceSansPro-Light" size:20.0f]};
[[UIBarButtonItem appearance] setTitleTextAttributes: barButtonItemAttributes forState:UIControlStateNormal];
[[UIBarButtonItem appearance] setTitleTextAttributes: barButtonItemAttributes forState:UIControlStateHighlighted];
[[UIBarButtonItem appearance] setTitleTextAttributes: barButtonItemAttributes forState:UIControlStateSelected];
[[UIBarButtonItem appearance] setTitleTextAttributes: barButtonItemAttributes forState:UIControlStateDisabled];
And here's an example of my viewWillAppear:
- (void) viewWillAppear:(BOOL)animated {
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStylePlain target:self action:@selector(doneButtonPressed)];
self.navigationItem.rightBarButtonItem.tintColor = [UIColor colorWithRed:141.0/255.0 green:209.0/255.0 blue:205.0/255.0 alpha:1.0];
}
Am I somehow changing the font back, or am I misusing the appearance proxy?
The problem is that the tintColor
setting conflicts with the title text attributes. Comment out that line and all will be well.
If you are going to use title text attributes, then incorporate the text color into those attributes:
NSDictionary* barButtonItemAttributes =
@{NSFontAttributeName:
[UIFont fontWithName:@"Georgia" size:20.0f],
NSForegroundColorAttributeName:
[UIColor colorWithRed:141.0/255.0 green:209.0/255.0 blue:205.0/255.0 alpha:1.0]
};
By using this approach in viewDidLoad method you can set custom text,font,size etc all at once place.
UIView *customBarButtonView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 50, 30)];
UIButton *buttonDone = [UIButton buttonWithType:UIButtonTypeSystem];
[buttonDone addTarget:self action:@selector(doneButtonPressed:) forControlEvents:UIControlEventTouchUpInside];
buttonDone.frame = CGRectMake(10, 0, 50, 30);
buttonDone.titleLabel.textColor = [UIColor colorWithRed:141.0/255.0 green:209.0/255.0 blue:205.0/255.0 alpha:1.0];
buttonDone.titleLabel.font = [UIFont fontWithName:@"SourceSansPro-Light" size:20.0f];
[buttonDone setTitle:@"Done" forState:UIControlStateNormal];
[customBarButtonView addSubview:buttonDone];
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc]initWithCustomView:customBarButtonView];
_myrButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"French KeyBoard" style:UIBarButtonItemStylePlain target:self action:@selector(RbuttonItemdown:)];
NSDictionary* itemTextAttributes = @{NSFontAttributeName:[UIFont fontWithName:@"Georgia" size:12.0f], NSForegroundColorAttributeName:[UIColor blueColor], NSBackgroundColorAttributeName:[UIColor lightGrayColor]};
[_myrButtonItem setTitleTextAttributes:itemTextAttributes forState:UIControlStateNormal];
[self.navigationItem setRightBarButtonItem:_myrButtonItem];
You can use all of this :
NSString *const NSFontAttributeName ;
NSString *const NSParagraphStyleAttributeName ;
NSString *const NSForegroundColorAttributeName ;
NSString *const NSBackgroundColorAttributeName ;
NSString *const NSLigatureAttributeName ;
NSString *const NSKernAttributeName ;
NSString *const NSStrikethroughStyleAttributeName ;
NSString *const NSUnderlineStyleAttributeName ;
NSString *const NSStrokeColorAttributeName ;
NSString *const NSStrokeWidthAttributeName ;
NSString *const NSShadowAttributeName ;
NSString *const NSTextEffectAttributeName ;
NSString *const NSAttachmentAttributeName ;
NSString *const NSLinkAttributeName ;
NSString *const NSBaselineOffsetAttributeName ;
NSString *const NSUnderlineColorAttributeName ;
NSString *const NSStrikethroughColorAttributeName ;
NSString *const NSObliquenessAttributeName ;
NSString *const NSExpansionAttributeName ;
NSString *const NSWritingDirectionAttributeName ;
NSString *const NSVerticalGlyphFormAttributeName;
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.