Iphone UISegmentedControl选定状态图标图像

Iphone UISegmentedControl选定状态图标图像,iphone,objective-c,ios,cocoa-touch,ios5,Iphone,Objective C,Ios,Cocoa Touch,Ios5,如何为UISegmentedControl的选定状态设置图标图像?UISegmentedControl是否真的缺少此功能,或者只是我缺少技能?这里我以编程方式创建了两个UISegmentedControl元素,您可以设置图像图标 UISegmentedControl *switchView=[[UISegmentedControl alloc] initWithItems:[[[NSMutableArray alloc] initWithObjects:@"Yes",@"No",nil] aut

如何为
UISegmentedControl
选定状态设置图标图像?
UISegmentedControl
是否真的缺少此功能,或者只是我缺少技能?

这里我以编程方式创建了两个UISegmentedControl元素,您可以设置图像图标

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

您可以使用单行代码[uisegmentButtonRef setImage:[UIImage ImageName:@“allbtndown.png”]设置分段索引:分段索引]

如果您由Xib使用,请查找图像

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

-(void)segmentAction:(UISegmentedControl*)sender {

    [sender setImage:[UIImage imageNamed:@"image.png"] forSegmentAtIndex:sender.selectedSegmentIndex];

}

增强@Kuldeep的答案

分段控件中可能有两个或多个控件

[_segmentcontrol addTarget:self action:@selector(segmentAction:) forControlEvents:UIControlEventValueChanged];
如果要以不同的方式替换所有图像,请使用此代码

-(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];
    }
}
您还必须为
UIControlStateNormal
设置图像才能生效


Swift 4

我就是这样做的。制作分段控件并使用图像插入分段

确保将一个图像设置为选中,因为这将是初始选中的索引。 还将backgroundColor和tintColor设置为clear,以便分段控件仅显示图像

var newSegmentedControl: UISegmentedControl = {
        let segmentedControl = UISegmentedControl()

        segmentedControl.insertSegment(with: UIImage(named: "x_Selected.jpg"), at: 0, animated: true)
        segmentedControl.insertSegment(with: UIImage(named: "y_Normal.jpg"), at: 1, animated: true)

        segmentedControl.addTarget(self, action: #selector(segmentedControlChanged), for: .valueChanged)

        segmentedControl.selectedSegmentIndex = 0
        segmentedControl.backgroundColor = .clear
        segmentedControl.tintColor = .clear            

    }()
分段控件的值更改时调用的函数

@objc func segmentedControlChanged(sender: UISegmentedControl) {

    if sender.selectedSegmentIndex == 0 {
        sender.setImage(UIImage(named: "x_Selected.jpg"), forSegmentAt: sender.selectedSegmentIndex)
        sender.setImage(UIImage(named: "y_Normal.jpg"), forSegmentAt: 1)
    } else if sender.selectedSegmentIndex == 1 {
        sender.setImage(UIImage(named: "x_Normal.jpg"), forSegmentAt: 0)
        sender.setImage(UIImage(named: "y_Selected.jpg"), forSegmentAt: sender.selectedSegmentIndex)
    } 

}

希望您觉得这很有用……)

遵循此链接,我认为设置目标,然后从目标操作更改图像将对您有效。谢谢:
您还必须为uicontrol状态正常设置图像,以使其生效
@objc func segmentedControlChanged(sender: UISegmentedControl) {

    if sender.selectedSegmentIndex == 0 {
        sender.setImage(UIImage(named: "x_Selected.jpg"), forSegmentAt: sender.selectedSegmentIndex)
        sender.setImage(UIImage(named: "y_Normal.jpg"), forSegmentAt: 1)
    } else if sender.selectedSegmentIndex == 1 {
        sender.setImage(UIImage(named: "x_Normal.jpg"), forSegmentAt: 0)
        sender.setImage(UIImage(named: "y_Selected.jpg"), forSegmentAt: sender.selectedSegmentIndex)
    } 

}