Search code examples
objective-ciosuisegmentedcontrol

How to detect change in UISegmentedControl from a separate IBAction


I have a UISegmentedControl button with three segments. In ViewController.m this is working just fine -- pressing the buttons fires the correct methods.

I have another separate UIButton that when it is pressed it needs to first CHECK the state of the UISegmentedControl (to see which button is currently pressed) and then fire a method according to that segment value.

Here is my code for that separate UIButton. The button itself is working, but I cannot seem to figure out how to GET the current value of the segment of the UISegmentedControl.

Many thanks for any assistance here. I am new to OBJ-C. I know how to do this in VisualBasic, so answers that are on the more verbose side would be most appreciated as I need to know the 'why'. Thank you.

- (IBAction)decodeButton:(id)sender {
    UISegmentedControl *segment = [UISegmentedControl alloc];  // THIS DOES NOT WORK.

    if (segment.selectedSegmentIndex == 0) {
                decode(textToDecode);
    } else if(segment.selectedSegmentIndex == 1) {
                decode1(textToDecode);
    } else if(segment.selectedSegmentIndex == 2) {
                decode2(textToDecode); 
    }
}

Solution

  • Here is a Tutorial using UISegmentedControl in iOS.

    Just Create a Reference object and wire it properly to File Owner.

    IBOutlet UISegmentedControl *segmentedControl;
    

    Then set property

    @property (strong, nonatomic) IBOutlet UISegmentedControl * segmentedControl;
    

    Synthesize in .m file

    @synthesize segmentedControl;
    

    Now You can Access the selected index at any time.

    - (IBAction)decodeButton:(id)sender {
    
        if (segmentedControl.selectedSegmentIndex == 0) {
                    decode(textToDecode);
        } else if(segmentedControl.selectedSegmentIndex == 1) {
                    decode1(textToDecode);
        } else if(segmentedControl.selectedSegmentIndex == 2) {
                    decode2(textToDecode); 
        }
    }