How do I add a UITtoolbar to my main view.nib? - iphone

How do I add using the InterfaceBuilder?

If you already have a UINavigationController, it's preferable to use its built-in toolbar.
In Interface Builder, check "Shows Toolbar" in your Navigation Controller's properties, and then use the toolbarItems attribute in your view controllers to populate the toolbar:
self.toolbarItems = [NSArray arrayWithObjects:...];

If you don't have a UINavigationController, you can drag a UIToolbar in from the library. I usually set its frame in the nib using the snap to guides feature. Then you can set the items with the method that #Can Berk Güder gives. Using UIBarButtonSystemItemFlexibleSpace and/or UIBarButtonSystemItemFixedSpace you can get a pretty good arrangement of buttons.
If you're doing it this way, just declare a UIToolbar* toolbar and set #property (nonatomic, retain) IBOutlet UIToolbar* toolbar in the interface of your view controller. In the implementation just #synthesize toolbar;. You can set the items in viewDidLoad and link the toolbar to your nib file by adding a new referencing outlet to 'toolbar' in File's Owner.

Related

UITabbarController enable editing in more tab

How can I enable editing in the more tab? I can click on edit and see the items but I can't move them. Is there a option in UITabbarController?
Set tabBarController.customizableViewControllers to something, the easiest case would be:
tabBarController.customizableViewControllers = tabBarController.viewControllers;
after you set up the viewControllers.
You use the UITabBarControllerDelegate protocol when you want to augment the behavior of a tab bar. In particular, you can use it to determine whether specific tabs should be selected, to perform actions after a tab is selected, or to perform actions before or after the user customizes the order of the tabs. After implementing these methods in your custom object, you should then assign that object to the delegate property of the corresponding UITabBarController object.
First of all define outlets in the app delegate and attach them on Interface Builder, i assume you know how to do this:
IBOutlet UITabBarItem *tabBarItem1;
IBOutlet UITabBarItem *tabBarItem2;
IBOutlet UITabBarItem *tabBarItem3;
IBOutlet UITabBarItem *tabBarItem4;
Then your class, probably the view controller must be UITabBarControllerDelegate and use the following hook:
- (void)tabBarController:(UITabBarController *)tabBarController willEndCustomizingViewControllers:(NSArray *)viewControllers changed:(BOOL)changed
Hope that helps !

how to add a tab Bar to a Default view and communicate with other views using navigation controller

It might be simple but not able to find exact solution for this.i am using xcode 4.2.
I want to use Tab bar in one of the view in my application. i went through many tutorials all tutorials are related to navigation based application and other view based application.Even i understood how to add a tab bar controller in story board which is main view.
What i need is i have class called Homepage.h and .m and .xib which is subclass of UIViewController class.Again my class is not main class its added later for one of the view.So i want to add a tab bar and communicate with navigationBar and other views so how can i do it plz give me some samples.
Problem is i want to add Tab bar to the default UIView and communicate with navigation controller and other views. i dont want to drag Tab bar controller from utilities.Incase if i drag how can i make it view on moving from one view to another as i already have a Default UIview.Please give me links or any tutorials where i can add tab bar and switch between views using navigation controller.
NOTE: i am using Single View based Application
Take UINavigationController object and UITabBarController object in AppDelegate.h
In AppDelegate.h
First *first;
Second *second;
Third *third;
UINavigationController *navController;
UITabBarController *tabbar;
#property (nonatomic, retain) UITabBarController *tabbar;
#property (nonatomic, retain) UINavigationController *navController;
IN AppDelegate.m
#synthesize tabbar,navController;
in ApplicationdidFinishLaunching
tabbar=[[UITabBarController alloc]init];
first=[[First alloc]initWithNibName:#"First" bundle:nil];
second=[[Second alloc]initWithNibName:#"Second" bundle:nil];
third=[[Third alloc]initWithNibName:#"Third" bundle:nil];
navController=[[UINavigationController alloc]initWithRootViewController:first];
NSArray *viewControllerArray=[[[NSArray alloc] initWithObjects:navController1,second,third,nil] autorelease];
[self.window addSubview:tabbar.view];
[tabbar setViewControllers:viewControllerArray];
[first setTitle:#"First"];
[second setTitle:#"Second"];
[third setTitle:#"Third"];
Write this code and dont need to put Tabbar in XIB. Try thi code it will helps you.

How to add fixed bar displaying today's date below navigation bar?

I have a uitableview with a tabbar and a navigation bar. Just below the navigation bar, I want another fixed bar, sticking to the navigation bar even while scrolling through the table, which will display today's date. I know that the displaying the date involves NSDateFrmatter and such, so converting NSDates is not the issue. The issue is bar itself. How can I add such a fixed bar, and add a title (which will be the dates) to it?
There's a couple of ways you could achieve this, but here's what I'd do: first, create a UIViewController subclass, and add a UIToolbar instance to the controller's view with a frame of CGRectMake(0.f, 0.f, 320.f, 44.f). Then, create a UITableView instance, and also add it to the view with a frame of CGRectMake(0.f, 44.f, 320.f, self.view.frame.size.height - 44.f).
Instead of using UITableViewController you will have to subclass UIViewController and put a UIView with you date at the top and then the tableview below it. And set it up as the delegate and data source for the table in the header file and the outlets in Interface Builder.
#interface YourViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>
#property (nonatomic, retain) IBOutlet UITableView *tableView;
The only other thing that UITableViewController provides for you that you may need to implement yourself is it will automatically clear the table’s current selection when it receives a viewWillAppear: message.

How can I add a UIToolbar to a UIViewController?

I have a UIViewController. I want to add a UIToolbar to the bottom, but IB is not letting me. How can I achieve this?
Note:
The UIViewController is part of a UINavigationController. I'm not sure if this affects the visibility of the toolbar.
Starting from iOS 3.0 you can set toolbar items you want using following UIViewController's method:
- (void)setToolbarItems:(NSArray *)toolbarItems animated:(BOOL)animated
of simply set or override toolbarItems property.
And toolbar will appear automatically if you put your view controller inside navigation controller.
You can't add toolbar in IB, in IB all you can do is - set a dummy toolbar / navigation bar / tabBar etc. so that you can simulate them to arrange your view's subviews appropriately.
To set the toolbar for that viewController, you have to fill the UIViewController's:
setToolbarItems:animated:
or
#property(nonatomic, retain) NSArray *toolbarItems
so this toolbar and its items will be displayed when your viewController is presented.

How to modify a UIBarButtonItem view programmatically after it's been setup in Interface Builder?

I have created a UIBarButton item in Interface Builder and linked it to a UIBarButton item property in the class. In Interface Builder it's Style = Plain and Identifier = Custom and it's Title is blank.
Inside the class file on the viewDidLoad method I am trying to add a custom view to this UIBarButtonItem property.
E.g
UISegmentedControl *newButton = [[UISegmentedControl alloc] initWithItems:....];
newButton.momentary = YES;
newButton.segmentedControlStyle = UISegmentedControlStyleBar;
newButton.tintColor = [UIColor .....];
[self.myBarButtonItem setCustomView:newButton];
and this results in NOTHING showing up at all. Why is that?
I've read that if I create the UIBarButtonItem programmatically:
UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithCustomView:newButton];
and then add this BarButtonItem to the toolbar - it would work. My issue is I have lots of stuff going on my toolbar and this UIBarButton item needs to be on the FAR right of the toolbar and if I can't link to it directly in interface builder, then I'd have to build out ALL my toolbar items programmatically to get the layout I need going.
So is there a way to do this with a customView when linking to a UIBarButtonItem created in IB?
Thanks!
To change stuff that's on a UIToolBar you use it's items property. That should answer your question : How to programmatically replace UIToolBar items built in IB
Edit:
The way i like to work with those, is make a bunch of IBOutlets in the view controller class for each uibarbuttonitem. In Interface Builder, i put the first (default) items to be on the toolbar normally as a toolbar subview and all that, and the rest of them i put as top level items in the xib (same level as the view that is connected to the view controller's .view property outlet). That way i don't have to programatically create them. And still have them hidden to later attach them to the uitolbar.
If you use this approach than don't forget to call release on the top level IBOutlets if you use ivar IBOutlets (as opposed to #property IBOutlets) as all top level objects in a xib that aren't connected to a KVC compilant reference.