iPhone: adding segmented control to toolbar instead of buttons within navigation controller?

12,396

Solution 1

The solution to this is to (1) create the UISegmentedControl with all its buttons, etc., and then (2) create a UIBarButtonItem using the initWithCustomView:(UIView *)view initializer and provide the segmented control as the variable to this. Then add the Bar Button Item to the Toolbar using an array just like you did in your example code.

Make sure you set a target and action for your segmented controller, and I recommend setting its style to UISegmentedControlStyleBar. It'll look just like the one at the bottom of the Maps app. Hope this was what you are looking for.

Solution 2

Here is my code which adds a segmented control to the toolbar of a navigation controller. :

NSArray *segItemsArray = [NSArray arrayWithObjects: @"Settings", @"Templates", @"Notes", nil];
UISegmentedControl *segmentedControl = [[UISegmentedControl alloc] initWithItems:segItemsArray];
segmentedControl.frame = CGRectMake(0, 0, 200, 30);
segmentedControl.segmentedControlStyle = UISegmentedControlStyleBar;
segmentedControl.selectedSegmentIndex = 2;
UIBarButtonItem *segmentedControlButtonItem = [[UIBarButtonItem alloc] initWithCustomView:(UIView *)segmentedControl];
UIBarButtonItem *flexibleSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
NSArray *barArray = [NSArray arrayWithObjects: flexibleSpace, segmentedControlButtonItem, flexibleSpace, nil];

[self setToolbarItems:barArray];
Share:
12,396
dave
Author by

dave

Updated on June 26, 2022

Comments

  • dave
    dave almost 2 years

    im new to iphone programming so if you could help me out I would appreciate it- i have been all over the web and cant find the answer to this.

    my current setup is like this

    navigation controller in MainWindow.xib > View in navigation controller in MainWindow.xib calls RootViewController.xib > RootViewController.xib contains a single tableview.

    i can then load in a toolbar using the following code in RootViewController.m

    UIBarButtonItem *buttonOne = [[UIBarButtonItem alloc] initWithTitle:@"One" 
         style:UIBarButtonItemStyleBordered target:self action:@selector(buttonOnePushed)];
    UIBarButtonItem *buttonTwo = [[UIBarButtonItem alloc] initWithTitle:@"Two" 
         style:UIBarButtonItemStyleBordered target:self action:@selector(buttonTwoPushed)]; 
    
    NSArray *barArray = [NSArray arrayWithObjects: buttonOne, buttonTwo, nil];
    [buttonOne release];
    [buttonTwo release];
    
    [self setToolbarItems:barArray animated:YES];
    
    [self.navigationController setToolbarHidden:NO animated:YES];
    

    this code works for buttons. but i cannot for the life of me find out how to add a segmented control instead of the buttons. i have tried an array with two segmented controls in it, but then can't add the array to the toolbar.

    if anyone could let me know some code that will add segmented controls in the same fashion as i have used to add the buttons i would greatly appreciate it.

    thanks, dave.

  • Neelesh
    Neelesh about 13 years
    how do i get which segment is selected in the segmentedController selector?
  • Drew C
    Drew C about 13 years
    check its selectedSegmentIndex property