UISegmentedControl - Selected Status Icon Image

How to configure icon image for selected state of UISegmentedControl . Is UISegmentedControl really missing this feature, or is it just my missing skills?

Is there any workaround?

Any answer is appreciated.

Cheers, Rafal

+8
ios objective-c iphone cocoa-touch ios5
source share
5 answers
  [segmentedControl addTarget:self action:@selector(segmentAction:) forControlEvents:UIControlEventValueChanged]; -(void)segmentAction:(UISegmentedControl*)sender { [sender setImage:[UIImage imageNamed:@"image.png"] forSegmentAtIndex:sender.selectedSegmentIndex]; } 
+18
source share

Here I created two UISegmentedControl elements programmatically, and you can set the image icon.

 UISegmentedControl *switchView=[[UISegmentedControl alloc] initWithItems:[[[NSMutableArray alloc] initWithObjects:@"Yes",@"No",nil] autorelease]]; [switchView setFrame:CGRectMake(180,802,94,27)]; switchView.selectedSegmentIndex=1; switchView.segmentedControlStyle=UISegmentedControlStyleBar; [switchView setImage:[UIImage imageNamed:@"switchBlueBg.png"] forSegmentAtIndex:0]; // set icon for when selected [switchView setImage:[UIImage imageNamed:@"switchOffPlain.png"] forSegmentAtIndex:1]; //set icon for when unselected [switchView addTarget:self action:@selector(checkOnOffState:) forControlEvents:UIControlEventValueChanged]; [scrollview addSubview:switchView]; UISegmentedControl *switchView1=[[UISegmentedControl alloc] initWithItems:[[[NSMutableArray alloc] initWithObjects:@"Yes",@"No",nil] autorelease]]; [switchView1 setFrame:CGRectMake(180,1003,94,27)]; switchView1.selectedSegmentIndex=1; switchView1.segmentedControlStyle=UISegmentedControlStyleBar; [switchView setImage:[UIImage imageNamed:@"switchBlueBg.png"] forSegmentAtIndex:0]; // set icon for when selected [switchView setImage:[UIImage imageNamed:@"switchOffPlain.png"] forSegmentAtIndex:1]; ////set icon for when unselected [switchView1 addTarget:self action:@selector(checkOnOffState1:) forControlEvents:UIControlEventValueChanged]; [scrollview addSubview:switchView1]; -(IBAction)checkOnOffState:(id)sender { UISegmentedControl* tempSeg=(UISegmentedControl *)sender; if(tempSeg.selectedSegmentIndex==0) { //your codes } else { //your codes } } 
+3
source share
 [segmentControl setBackgroundImage:image forState:UIControlStateSelected barMetrics:UIBarMetricsDefault] 

You also need to set the image for UIControlStateNormal for this to take effect.

Apple Documentation

+3
source share

You can set with one line of code [uisegmentButtonRef setImage: [UIImage imageNamed: @ "allbtndown.png"] forSegmentAtIndex: segmentIndex];

If you are using Xib, find the image

enter image description here

0
source share

Improving answer @Kuldeep

you can have two or more controls in a control segment

 [_segmentcontrol addTarget:self action:@selector(segmentAction:) forControlEvents:UIControlEventValueChanged]; 

if you want to replace all images differently than using this code.

 -(void)segmentAction:(UISegmentedControl*)sender { if(sender.selectedSegmentIndex==0) { [sender setImage:[UIImage imageNamed:@"calf_selected.png"] forSegmentAtIndex:sender.selectedSegmentIndex];//0 index [sender setImage:[UIImage imageNamed:@"wrist.png"] forSegmentAtIndex:1]; } else { [sender setImage:[UIImage imageNamed:@"calf.png"] forSegmentAtIndex:sender.selectedSegmentIndex];//for 1 index [sender setImage:[UIImage imageNamed:@"wrist_selected.png"] forSegmentAtIndex:0]; } } 
0
source share

All Articles