سؤال

I want to create an app including Segment Control and a label, change the label when the control is pressed.

I want to use "sender" to get the value of the segment control but why it's not working?

-(void)segmentControlIndexChanged:(id)sender
{
    switch ([sender selectedIndex]) {
        case 0:
            label.text = @"Case Zero :)";
            break;
        case 1:
            label.text = @"Happy New Year!";
            break;
        default:
            label.text = @"Press a button:";
            break;
    }
}

Other trouble: the code below causes:

-[ViewController segmentControlIndexChanged:]: unrecognized selector sent to instance

//ViewController.h
@interface ViewController : UIViewController {
    IBOutlet UILabel *label;
    IBOutlet UISegmentControl *segmentControl;
}

@property (retain, nonatomic) UILabel *label;
@property (retain, nonatomic) UISegmentControl *segmentControl;

-

//ViewController.m
-(IBAction)segmentControlIndexChanged
{
    switch ([segmentControl selectedSegmentIndex]) {
        case 0:
            label.text = @"X'mas always come first :)";
            break;
        case 1:
            label.text = @"Happy New Year!";
            break;
        default:
            label.text = @"Press a button:";
            break;
    }
}
هل كانت مفيدة؟

المحلول

It does not work because UISegmentedControl has selectedSegmentIndex property, not selectedIndex:

switch ([sender selectedSegmentIndex]) { // <<== Here
    case 0:
        label.text = @"Case Zero :)";
        break;
    case 1:
        label.text = @"Happy New Year!";
        break;
    default:
        label.text = @"Press a button:";
        break;
}

Sometimes, Xcode lets you pick a wrong method; when you are not certain of the exact name, consult developer documentation available online and through Xcode's Help/Documentation and API Reference.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top