如何在iPhone中自定义UISwitch按钮?

6

我使用以下代码创建了一个UISwitch...

UISwitch *switch = [[UISwitch alloc]initWithFrame:CGRectMake(110, 230, 60, 60)];
[window addSubview:switchView];
[switchView release];

创建的按钮将是一个开关,它包含“ON”和“OFF”两种状态。默认属性为:OFF按钮是白色,ON按钮是蓝色。现在我想创建一个自定义的开关,使开关的背景颜色和文本内容可以改变。这是否可能?请详细解释一下。谢谢!
2个回答

20

如果您不编写自己的控件,就无法修改UISwitch控件。

但目前最好的方法是使用UISegmentControl,并在其上处理事件以切换on.png和off.png图像。

UISegmentedControl* switchView=[[UISegmentedControl alloc] initWithItems:[[[NSMutableArray alloc] initWithObjects:@"On",@"Off",nil] autorelease]];
    [switchView setFrame:CGRectMake(20,365,140,28)];
    switchView.selectedSegmentIndex=0;
    switchView.segmentedControlStyle=UISegmentedControlStyleBar;
    [switchView setImage:[UIImage imageNamed:@"onSelected.png"] forSegmentAtIndex:0];
    [switchView setImage:[UIImage imageNamed:@"off.png"] forSegmentAtIndex:1];
    [switchView addTarget:self action:@selector(checkOnOffState:) forControlEvents:UIControlEventValueChanged];

    self.navigationItem.titleView=switchView;

并编写像这样的checkOnOffState方法代码-

-(IBAction)checkOnOffState:(id)sender{

    UISegmentedControl* tempSeg=(UISegmentedControl *)sender;
    if(tempSeg.selectedSegmentIndex==0){
        [tempSeg setImage:[UIImage imageNamed:@"onSelected.png"] forSegmentAtIndex:0];
        [tempSeg setImage:[UIImage imageNamed:@"off.png"] forSegmentAtIndex:1];
    }
    else{
        [tempSeg setImage:[UIImage imageNamed:@"on.png"] forSegmentAtIndex:0];
        [tempSeg setImage:[UIImage imageNamed:@"offSelected.png"] forSegmentAtIndex:1];
    }   
}

1
选中的 onSelected.png 图片和 on.png 图片有什么区别?"selected" 位是实际的旋钮,而 on/off.png 是轨道吗? - Greg Combs
我们可以设置的图像大小有限制吗?我的图像位于段落中心,没有充分利用整个空间。任何帮助将不胜感激。 - megha

2
我使用了这个解决方案:UICustomSwitch:它可以自定义 UISlider 并将 max value 设置为 1。
你可以更改开关的图片、左右文本,并在背景上使用唯一的颜色(如果不想使用图片)。
我所做的唯一更改是更改名称:UI 已经被苹果类占用,所以我改成了自己的名字。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接