To give some background, I am making a UINavigationControlled-based blog type app (I suppose it most closely resembles the iPhone facebook app). Regardless of the view that is currently active, the NavigationBar shows some buttons in its title area, such as Friend Requests and Activity Notifications. In much the same was as the facebook app, clicking these buttons will create a popup view.
Currently, I am doing things in a way that I feel is incredibly inefficient. For every view that is loaded, I am recreating the buttons and adding them to the navigation bar. My code is below:
//Setup the custom middle buttons
UIView *container = [[UIView alloc] init];
container.frame = CGRectMake(0, 0, 80, 44);
// create a button and add it to the container
UIButton *notificationButton = [UIButton buttonWithType:UIButtonTypeCustom];
notificationButton.frame = CGRectMake(0, 0, 35, 44);
[notificationButton addTarget:self
action:@selector(showNotifications:)
forControlEvents:UIControlEventTouchUpInside];
[container addSubview:notificationButton];
// add another button to the container
UIButton *friendActivityButton = [UIButton buttonWithType:UIButtonTypeCustom];
friendActivityButton.frame = CGRectMake(45, 0, 35, 44);
[friendActivityButton addTarget:self
action:@selector(showFriendActivity:)
forControlEvents:UIControlEventTouchUpInside];
[container addSubview:friendActivityButton];
// Set the titleView to the container view
[self.navigationItem setTitleView:container];
[container release];
Since my app has multiple views and the navigation bar is always visible, it seems silly to keep on recreating the buttons, adding them to a container view, then adding that view to the titleView of the navigation controller.
What would be a better way of achieving the same effect? I was looking into subclassing or creating a category for UINavigationBar and maybe adding in the container view code there. However, I did not know how to make the selectors work in these cases. I also wasnt sure how to get access to the titleView property with a UINavigationBar category.
Any help on this would be great! Thank you!