Customize Navigation Controller - iphone

I have problem in Navigation Controller. I can't create dynamic buttons on Navigation Bar.
I have used Navigation Bar. Inside this, I have one TabBar.
And Inside TabBar, I have one more Navigation Controller.
I can create buttons on that. But I want Dynamic buttons on parent Navigation controller of TabBar.
For Button It's not working.
My Code:
UIBarButtonItem *searchBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemSearch target:self action:#selector(btnClick:)];
//[self.navigationItem setRightBarButtonItem:searchBtn];
[app.navigationController.navigationItem setRightBarButtonItem:searchBtn];
[searchBtn release];
For Hide the parent Navigation Controller, It's working.
app.navigationController.navigationBarHidden =YES;
How can I solve this problem.?

if i understand you correctly you should change this
[app.navigationController.navigationItem setRightBarButtonItem:searchBtn];
[searchBtn release];
into
[app.navigationItem setRightBarButtonItem:searchBtn];
[searchBtn release];

Related

Adding buttons to custom navigation bar

In my viewDidLoad method I have the following:
navigBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:#"Back" style:UIBarButtonSystemItemAction target:self action:#selector(btnClicked:)];
[self.view addSubview:navigBar];
The button does not show up at all! What am I missing?
// create the navigation bar and add it to the view
UINavigationBar *navigationBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
[self.view addSubview:navigationBar];
// create a button
UIBarButtonItem *button = [[UIBarButtonItem alloc] initWithTitle:#"Back" style:UIBarButtonSystemItemAction target:self action:#selector(btnClicked:)];
// create a UINavigationItem and add the button in the right hand side
UINavigationItem *navItem = [[UINavigationItem alloc] initWithTitle:nil];
navItem.rightBarButtonItem = button;
// add the UINavigationItem to the navigation bar
[navigationBar pushNavigationItem:navItem animated:NO];
set button on navigation bar .then u create a BarButtonItem on navigation.
barbutton=[UIBarButtonItem alloc] ]initWithTitle......
navigation.navigationController.rightBarButton= barbutton;
First read this :
When you use a navigation bar as a standalone object, you are responsible for providing its contents. Unlike other types of views, you do not add subviews to a navigation bar directly. Instead, you use a navigation item (an instance of the UINavigationItem class) to specify what buttons or custom views you want displayed. A navigation item has properties for specifying views on the left, right, and center of the navigation bar and for specifying a custom prompt string.
A navigation bar manages a stack of UINavigationItem objects. Although the stack is there mostly to support navigation controllers, you can use it as well to implement your own custom navigation interface. The topmost item in the stack represents the navigation item whose contents are currently displayed by the navigation bar. You push new navigation items onto the stack using the pushNavigationItem:animated: method and pop items off the stack using the popNavigationItemAnimated: method. Both of these changes can be animated for the benefit of the user.
So basically what you need to do is :
[navigBar pushNavigationItem:self.navigationItem animated:NO];

Center a button in a navigationBar

I would like to center a button in my navigationBar, which is currently defined as a rightBarButtonItem :
UIBarButtonItem *audioBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemPlay target:self action:#selector(toggleAudioPlayback:)];
self.navigationItem.rightBarButtonItem = audioBtn;
[audioBtn release];
You can use the .titleView property of your navigation item - but you'll need to create your own assets for this (you won't be able to use a UIBarButtonItem). From Apple's docs:
...(titleViews) can contain buttons. Use
the buttonWithType: method in UIButton
class to add buttons to your custom
view in the style of the navigation
bar. Custom title views are centered
on the navigation bar and may be
resized to fit.

Adding items to a navigation toolbar

I have a navigation toolbar in which I am adding toolbar items programatically, as below. The toolbar displays properly, and the toolbar style is set to black opaque. but the button on the toolbar does not display. Why?
//Set up the toolbar
[[[self navigationController] toolbar] setBarStyle:UIBarStyleBlackOpaque];
UIBarButtonItem *myButtonItem =
[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:#selector(handleMyButton)];
NSArray *myItems = [NSArray arrayWithObjects: myButtonItem,nil];
[[self navigationController] setToolbarItems:myItems animated:NO];
[myButtonItem release];
UINavigationController fetches the buttons that should be used for the navigation bar and the tool bar from the current visible view controller. This means that you add the buttons you want to have to the view controller, not the navigation controller. So it should work just fine if you do:
[self setToolbarItems:myItems animated:NO];
Compare that with how the add button is added to the navigation bar in the default template for a Navigation Based Application with Core Data:
self.navigationItem.rightBarButtonItem = addButton;
This means that when you push a new view controller the buttons in the tool bar will disappear and then appear again when you pop back.
You are referencing the toolbar owned by your navigationController in the first line and not in the 4th line. It would appear that the necessary fix is:
[[[self navigationController] toolbar] setToolbarItems:myItems animated:NO];
instead of your current line 4.
Show the toolbar by setting the toolbarHidden property of the navigation controller object to NO.
To assign buttons to the toolbar you would call this method
[toolbar setItems:];
Instead of
[[self navigationController] setToolbarItems: animated:];

How to add bar buttons to UINavigation bar

Hey, I am trying to add bar button items to my UINavigationBar (nav bar) but I have found out that bar button items are not properties of navigation bar and hence can't be accessed directly like:
UIBarButtonItem *rightButton = [[UIBarButtonItem alloc] initWithTitle:#"Done"
style:UIBarButtonSystemItemDone target:nil action:nil];
navBar.rightBarButtonItem =rightButton;
I am creating my navigation bar programmatically.
Apparently, there is something called UINavigation Item that has to be dealt with to add bar buttons. Can anyone tell me how to go about this? How to create this UINavigation item programmatically and add this to my navBar and then add the bar buttons to it.
UINavigationBars shouldn't be used on their own, outside of a UINavigationController.
When a navigation controller is used, each view controller on the navigation stack has a UINavigationItem. It is this UINavigationItem that you can add bar button items to.
self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:#"Done"
style:UIBarButtonSystemItemDone
target:nil action:nil] autorelease];

Adding a Sub Navigation Bar below NavigationController

I want to add a bar right below NavigationController which will visible all the time even as user scrolls down. Can you tell me how I can do that or refer me to an article? I want to add couple of buttons to it to sort out results.
Thanks
If the youtube app most viewed section (http://www.engadget.com/photos/the-definitive-iphone-user-interface-gallery/#294309) is what you are after, then you don't need a bar below the navigation bar.
You could make a UISegmentedControl and add it as a custom title view on the navigation item of your view controller. Then if you want a title to also be displayed above the buttons you would set the prompt property on the navigation item.
So, in the init method of view controller that has the scrollable view:
self.navigationItem.prompt = #"Title of this view";
NSArray *items = [NSArray arrayWithObjects:#"Sort1", #"Sort2", nil];
UISegmentedControl *control = [[[UISegmentedControl alloc] initWithItems:items]
autorelease];
[control addTarget:self
action:#selector(action:)
forControlEvents:UIControlEventValueChanged];
self.navigationItem.titleView = control;
As far as I know, it is impossible to nest multiple navigation controllers.