How to programmatically add a UISegmentedControl to a container view

后端 未结 7 924
情话喂你
情话喂你 2020-12-12 17:54

How would I define the frame for a UISegmentedControl? I would like the segmented control to appear at the bottom of a container view i.e UI

相关标签:
7条回答
  • 2020-12-12 18:21

    To add a UISegmentedControl to a container view programmatically, follow following steps:

    // Create UISegmentedControl object to add control UISegment.
    UISegmentedControl *objSegment = [[UISegmentedControl alloc] initWithItems:array];
    
    // Set frame for objSegment Control (formate: (x, y, width, height)). where, y = (height of view - height of control). 
    [objSegment setFrame:CGRectMake(0, (self.view.frame.size.height - 40), 320, 40)];
    
    // handle UISegmentedControl action.
    [objSegment addTarget:self action:@selector(handleSegmentControl:) forControlEvents: UIControlEventValueChanged];
    
     // Add your UISegmentedControl in your view.
    [self.view addSubview:objSegment];
    

    If you have any query, Contact me.

    0 讨论(0)
  • 2020-12-12 18:26

    This will work for all type of iOS device:

    UISegment *segment = [[UISegmentedControl alloc] initWithItems:array];
    segment.frame = CGRectMake(0, self.view.frame.size.height - 40, 300, 40);
    UIFont *font = [UIFont fontWithName:@"DroidSans" size:18.0f];
    NSDictionary *attributes = [NSDictionary dictionaryWithObject:font
                                                           forKey:NSFontAttributeName];
    [segment setTitleTextAttributes:attributes
                                    forState:UIControlStateNormal];
    [segment addTarget:self action:@selector(segmentAction:) forControlEvents: UIControlEventValueChanged];
    [self.view addSubview:segment];
    
    0 讨论(0)
  • 2020-12-12 18:27

    U can do like this...

    UISegmentedControl *segmentControl = [[UISegmentedControl alloc]initWithItems:@[@"One",@"Two"]];
    
    [segmentControl setSegmentedControlStyle:UISegmentedControlStyleBar];
    segmentControl.frame = CGRectMake(10, 50, 300, 30);
    [segmentControl addTarget:self action:@selector(segmentedControlValueDidChange:) forControlEvents:UIControlEventValueChanged];
    [segmentControl setSelectedSegmentIndex:0];
    [scrollView addSubview:segmentControl];
    [segmentControl release];
    

    Step 2:

    -(void)segmentedControlValueDidChange:(UISegmentedControl *)segment
    {
    switch (segment.selectedSegmentIndex) {
        case 0:{
            //action for the first button (Current)
            break;}
        case 1:{
            //action for the first button (Current)
            break;}
        }
    }
    
    0 讨论(0)
  • 2020-12-12 18:32

    Swift:

    let items = ["All Fruits", "Orange", "Grapes", "Banana"]
    let filtersSegment = UISegmentedControl(items: items)
    filtersSegment.frame = CGRect.init(x: 0, y: 0, width: 300, height: 50)
    filtersSegment.selectedSegmentIndex = 0
    filtersSegment.tintColor = UIColor.black
    filtersSegment.addTarget(self, action: #selector(self.filterApply), for: UIControlEvents.valueChanged)
    self.view.addSubview(filterSegment)
    
    @objc private func filterApply(segment: UISegmentedControl) -> Void {
        switch segment.selectedSegmentIndex {
        case 1:
            //Do something for Orange
        case 2:
            //Do something for Grapes
        case 3:
            //Do something for Banana
        default:
            //Do something for All Fruits
        }
    }
    
    0 讨论(0)
  • 2020-12-12 18:37

    this one is perfect I tested.....

    UIScrollView *scroll = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 320, 435)];
    scroll.contentSize = CGSizeMake(320, 700);
    scroll.showsHorizontalScrollIndicator = YES;
    
    NSArray *itemArray = [NSArray arrayWithObjects: @"One", @"Two", @"Three", nil];
    UISegmentedControl *segmentedControl = [[UISegmentedControl alloc] initWithItems:itemArray];
    segmentedControl.frame = CGRectMake(35, 200, 250, 50);
    segmentedControl.segmentedControlStyle = UISegmentedControlStylePlain;
    [segmentedControl addTarget:self action:@selector(MySegmentControlAction:) forControlEvents: UIControlEventValueChanged];
    segmentedControl.selectedSegmentIndex = 1;     
    [scroll addSubview:segmentedControl];
    [segmentedControl release]; 
    [self.view addSubview:scroll];
    

    Then add your method in your class.

    - (void)MySegmentControlAction:(UISegmentedControl *)segment 
    {    
        if(segment.selectedSegmentIndex == 0)
        {
            // code for the first button
        } 
    }
    

    For deprecated UISegmentedControlStyle you can take a look on this URL.

    0 讨论(0)
  • 2020-12-12 18:39

    Updated answer for Swift 4.x:

    class SegmentClass: UIViewController {
        func addControl()  {
            let items = ["Uno", "Dos", "Tres"]
            let segmentedControl = UISegmentedControl(items: items)
            segmentedControl.frame = CGRect(x: 35, y: 200, width: 250, height: 50)
            segmentedControl.addTarget(self, action: #selector(segmentAction(_:)), for: .valueChanged)
            segmentedControl.selectedSegmentIndex = 1
            view.addSubview(segmentedControl)
        }
    
        @objc func segmentAction(_ segmentedControl: UISegmentedControl) {
            switch (segmentedControl.selectedSegmentIndex) {
            case 0:
                break // Uno
            case 1:
                break // Dos
            case 2:
                break // Tres
            default:
                break
            }
        }
    }
    

    Original answer in Objective-C:

    NSArray *itemArray = [NSArray arrayWithObjects: @"Uno", @"Dos", @"Tres", nil];
    UISegmentedControl *segmentedControl = [[UISegmentedControl alloc] initWithItems:itemArray];
    segmentedControl.frame = CGRectMake(35, 200, 250, 50);
    [segmentedControl addTarget:self action:@selector(segmentAction:) forControlEvents: UIControlEventValueChanged];
    segmentedControl.selectedSegmentIndex = 1;
    [self.view addSubview:segmentedControl];
    
    1. Create an array to store the values for the segment
    2. Initialize the segment using the array
    3. Assign it a location on the screen & size the control
    4. Point it towards a method that is called when the user interacts with it
    5. Select a default value (in this case, Dos)
    6. Place it on the main view

    Then create the segmentAction method that is called when the user changes a value

    - (void)segmentAction:(UISegmentedControl *)segment
    {
        switch (segment.selectedSegmentIndex) {
            case 0:
                // Uno
                break;
            case 1:
                // Dos
                break;
            case 2:
                // Tres
                break;
            default:
                break;
        }
    }
    

    I just prefer the switch statement because it is cleaner to look at. You can improve it by creating an enum and using the values in it for the options (optionUno,optionDos,optionTres) instead of 0,1,2.

    0 讨论(0)
提交回复
热议问题