How to detect change in UISegmentedControl from a separate IBAction

mstace picture mstace · Dec 31, 2012 · Viewed 31.2k times · Source

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); 
    }
}

Answer

Siba Prasad Hota picture Siba Prasad Hota · Dec 31, 2012

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); 
    }
}