1

Every selectedSegmentIndex add different view controller.

On first segmentindex click, present new viewcontroller and second segment index, present another viewcontroller.

and segment control only show bottom.(not add in navigation bar).

segmentcontrol as it is visible every view controller(like tab bar controller).

my problem is that when new controller pop up segment controller disable. Need help in getting this done.

Alexis Pigeon
  • 7,423
  • 11
  • 39
  • 44
Sneha
  • 21
  • 3

1 Answers1

0

Try this code in .h file add

import

@interface SegmentManagingViewController : UIViewController <UINavigationControllerDelegate> {
    UISegmentedControl    * segmentedControl;
    UIViewController      * activeViewController;
    NSArray               * segmentedViewControllers;
   IBOutlet UILabel *theLabel;
    IBOutlet UIImageView *image;
   }
//-(void)setTextColorsForSegmentedControl:(UISegmentedControl*)segmented;
@property (nonatomic, retain, readonly) IBOutlet UISegmentedControl * segmentedControl;
@property (nonatomic, retain, readonly) UIViewController * activeViewController;
@property (nonatomic, retain, readonly) NSArray * segmentedViewControllers;

@end

in .m file add

 #import "SegmentManagingViewController.h"
     #import "CategoryViewController.h"
     #import "AtoZViewController.h"

    @interface SegmentManagingViewController ()

    @property (nonatomic, retain, readwrite) IBOutlet UISegmentedControl * segmentedControl;
    @property (nonatomic, retain, readwrite) UIViewController            * activeViewController;
    @property (nonatomic, retain, readwrite) NSArray                     * segmentedViewControllers;
    - (void)didChangeSegmentControl:(UISegmentedControl *)control;
    - (NSArray *)segmentedViewControllerContent;

    @end

    @implementation SegmentManagingViewController

    @synthesize segmentedControl, activeViewController, segmentedViewControllers;

    - (void)viewDidLoad {
        [super viewDidLoad];
        self.navigationItem.title =@"Breadworks";
        //self.navigationItem.
        [image release];
        theLabel = [[UILabel alloc] initWithFrame:CGRectMake(140,-40,180,60)];
            theLabel.backgroundColor = [UIColor colorWithRed:120.0f/255.0f green:69.0f/255.0f blue:53.0f/255.0f alpha:1.0f ];

        [theLabel setFont:[UIFont fontWithName:@"Noteworthy " size:15]];
        //[self.view addSubview:theLabel];
        self.segmentedViewControllers = [self segmentedViewControllerContent];
        //self.navigationController.navigationBarHidden=YES;
        NSArray * segmentTitles = [self.segmentedViewControllers arrayByPerformingSelector:@selector(title)];
        self.segmentedControl = [[UISegmentedControl alloc] initWithItems:segmentTitles];
        self.segmentedControl.tintColor = [UIColor colorWithRed:255.0f/255.0f green:252.0f/255.0f blue:235.0f/255.0f alpha:1.0f];
        self.navigationController.navigationBar.tintColor = [UIColor colorWithRed:120.0f/255.0f green:69.0f/255.0f blue:53.0f/255.0f alpha:1.0f ];
        self.segmentedControl.frame=CGRectMake(0,0,768, 73);
        self.segmentedControl.selectedSegmentIndex = 0;
        self.segmentedControl.segmentedControlStyle = UISegmentedControlStyleBar;
        //self.navigationController.navigationBar.frame = CGRectMake(0, 0,760, 100);
        [self.segmentedControl addTarget:self
                                  action:@selector(didChangeSegmentControl:)
                        forControlEvents:UIControlEventValueChanged];
        self.view.frame = CGRectMake(0,4,330, 53);
        self.view.backgroundColor = [UIColor colorWithRed:255.0f/255.0f green:252.0f/255.0f blue:235.0f/255.0f alpha:1.0f];

       [segmentedControl setTitle:@"1" forSegmentAtIndex:0]
           [segmentedControl setTitle:@"2" forSegmentAtIndex:1];
           [self.view addSubview:segmentedControl];
        [self.segmentedControl release];

        [self didChangeSegmentControl:self.segmentedControl]; // kick everything off


    }

    - (NSArray *)segmentedViewControllerContent {

        UIViewController * controller1 = [[CategoryViewController alloc] initWithParentViewController:self];
        UIViewController * controller2 =[[AtoZViewController alloc] initWithParentViewController:self] ;
        NSArray * controllers = [NSArray arrayWithObjects:controller1, controller2, nil];

        [controller1 release];
        [controller2 release];

        return controllers;
    }

    #pragma mark -
    #pragma mark Segment control

    - (void)didChangeSegmentControl:(UISegmentedControl *)control {
        if (self.activeViewController) {
            [self.activeViewController viewWillDisappear:NO];
            [self.activeViewController.view removeFromSuperview];
            [self.activeViewController viewDidDisappear:NO];
        }
        //self.segmentedControl.frame=CGRectMake(5,4,300, 50);


        self.activeViewController = [self.segmentedViewControllers objectAtIndex:control.selectedSegmentIndex];

        [self.activeViewController viewWillAppear:NO];
        [self.view addSubview:self.activeViewController.view];
        [self.activeViewController viewDidAppear:NO];

        NSString * segmentTitle = [control titleForSegmentAtIndex:control.selectedSegmentIndex];
        self.navigationItem.backBarButtonItem  = [[UIBarButtonItem alloc] initWithTitle:segmentTitle style:UIBarButtonItemStylePlain target:nil action:nil];
        /*if(self.segmentedControl.selectedSegmentIndex == 0)
         {
         segmentedControl.tintColor = [UIColor colorWithRed:255.0f/255.0f green:252.0f/255.0f blue:235.0f/255.0f alpha:10.0f];
         }
         else
         {

         //self.segmentedControl.tintColor = [UIColor redColor];
         }*/
    }

    #pragma mark -
    #pragma mark View life cycle

    - (void)viewWillAppear:(BOOL)animated {
        [super viewWillAppear:animated];
        [self.activeViewController viewWillAppear:animated];
    }

    - (void)viewDidAppear:(BOOL)animated {
        [super viewDidAppear:animated];
        [self.activeViewController viewDidAppear:animated];
    }

    - (void)viewWillDisappear:(BOOL)animated {
        [super viewWillDisappear:animated];
        [self.activeViewController viewWillDisappear:animated];
    }

    - (void)viewDidDisappear:(BOOL)animated {
        [super viewDidDisappear:animated];
        [self.activeViewController viewDidDisappear:animated];
    }



    #pragma mark -
    #pragma mark Memory management

    - (void)didReceiveMemoryWarning {
        [super didReceiveMemoryWarning];

        for (UIViewController * viewController in self.segmentedViewControllers) {
            [viewController didReceiveMemoryWarning];
        }
    }

    - (void)viewDidUnload {
        self.segmentedControl         = nil;
        self.segmentedViewControllers = nil;
        self.activeViewController     = nil;
        //[self.segmentedControl release];
        [super viewDidUnload];

    }

    @end
iAppDeveloper
  • 1,088
  • 1
  • 8
  • 16
  • Thanks! i already try this code but this code support navigation method like 1)didShowViewController and 2)willShowViewController and i use segment control not navigation bar but bottom like toolbar. – Sneha Dec 14 '12 at 10:39
  • You can replace `[self.segmentedViewControllers arrayByPerformingSelector:@selector(title)]` with `[self.segmentedViewControllers valueForKeyPath:@"@unionOfObjects.title"]` to avoid the dependancy on external code. See the answer here: http://stackoverflow.com/a/16569259/296446 – Robert May 15 '13 at 15:38