Adding a UILabel to a UIToolbar
Have a look into this
[[UIBarButtonItem alloc] initWithCustomView:yourCustomView];
Essentially every item must be a "button" but they can be instantiated with any view you require. Here is some example code. Note, since other buttons are typically on the toolbar, spacers are placed on each side of the title button so it stays centered.
NSMutableArray *items = [[self.toolbar items] mutableCopy];UIBarButtonItem *spacer = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];[items addObject:spacer];[spacer release];self.titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(0.0 , 11.0f, self.view.frame.size.width, 21.0f)];[self.titleLabel setFont:[UIFont fontWithName:@"Helvetica-Bold" size:18]];[self.titleLabel setBackgroundColor:[UIColor clearColor]];[self.titleLabel setTextColor:[UIColor colorWithRed:157.0/255.0 green:157.0/255.0 blue:157.0/255.0 alpha:1.0]];[self.titleLabel setText:@"Title"];[self.titleLabel setTextAlignment:NSTextAlignmentCenter];UIBarButtonItem *spacer2 = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];[items addObject:spacer2];[spacer2 release];UIBarButtonItem *title = [[UIBarButtonItem alloc] initWithCustomView:self.titleLabel];[items addObject:title];[title release];[self.toolbar setItems:items animated:YES];[items release];
For those using Interface Builder to layout your UIToolBar
, it is also possible to do this using Interface Builder alone.
To add a UILabel
to a UIToolBar
you need to add a generic UIView
object to your UIToolBar
in IB by dragging a new UIView
object over your UIToolBar
. IB
will automatically create a UIBarButtonItem
that will be initialized with your custom UIView
. Next add a UILabel
to the UIView
and edit the UILabel
graphically to match your preferred style. You can then visually set up your fixed and/or variable spacers as desired to position your UILabel
appropriately.
You must also set the background of both the UILabel
and the UIView
to clearColor
to get the UIToolBar
to show through correctly under the UILabel
.
I found answerBot's answer very useful, but I think I found an even easier way, in Interface Builder:
- create a UIBarButtonItem and add it to your Toolbar in InterfaceBuilder
- Uncheck "enabled" for this BarButtonItem
plug this BarButtonItem to a property in your class (this is inSwift, but would be very similar in Obj-C):
@IBOutlet private weak var lastUpdateButton: UIBarButtonItem! // Dummy barButtonItem whose customView is lastUpdateLabel
add another property for the Label itself:
private var lastUpdateLabel = UILabel(frame: CGRectZero)
in viewDidLoad, add the following code to set the properties of yourlabel, and add it as the customView of your BarButtonItem
// Dummy button containing the date of last updatelastUpdateLabel.sizeToFit()lastUpdateLabel.backgroundColor = UIColor.clearColor()lastUpdateLabel.textAlignment = .CenterlastUpdateButton.customView = lastUpdateLabel
To update the
UILabel
text:lastUpdateLabel.text = "Updated: 9/12/14, 2:53"lastUpdateLabel.sizeToFit()
Result :
You have to call lastUpdateLabel.sizetoFit()
each time you update the label text