Search code examples
iphonecocoa-touchuiviewcontrolleruinavigationcontrolleruitableview

Add toolbar to UITableViewController


What is the simplest way to add UIToolBar to UITableViewController? I'm depending on edit functionality, so I can't change UITableViewController to UIViewController easily.


Solution

  • No problem at all, UITableViewController is a subclass of UIViewController. And it so happens that in iPhone OS 3.0 any UIViewController (and subclasses) can work in conjunction with a UINavigationController to provide a context aware toolbar.

    In order for this to work you must:

    • Make sure that you use a UINavigationController to contain all your view controllers that needs a toolbar.
    • Set the toolbarsItems property of the view controller that wants a toolbar.

    This is almost as easy as as setting the view controller's title, and should be done the same way. Most probably by overriding the initWithNibName:bundle: initializer. As an example:

    -(id)initWithNibName:(NSString*)name bundle:(NSBundle*)bundle;
    {
      self = [super initWithNibName:name bundle:bundle];
      if (self) {
        self.title = @"My Title";
        NSArray* toolbarItems = [NSArray arrayWithObjects:
            [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd 
                                                          target:self
                                                          action:@selector(addStuff:)],
            [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemSearch 
                                                          target:self
                                                          action:@selector(searchStuff:)],
            nil];
        [toolbarItems makeObjectsPerformSelector:@selector(release)];
        self.toolbarItems = toolbarItems;
        self.navigationController.toolbarHidden = NO;
      }
      return self;
    }
    

    You can also use setToolbarItems:animated: instead of assigning to the toolbarItems property, to add and remove toolbar items in an animated fashion on the fly.