UISwitch - 从开/关切换到是/否

时间:2010-12-01 14:10:06

标签: iphone uiswitch

有没有人知道我可以将on和off的文本标签更改为yes和no。

我用

做到了
            ((UILabel *)[[[[[[switchControl subviews] lastObject] subviews] objectAtIndex:2] subviews] objectAtIndex:0]).text = @"Yes";
        ((UILabel *)[[[[[[switchControl subviews] lastObject] subviews] objectAtIndex:2] subviews] objectAtIndex:1]).text = @"No";

然而,随着iOS 4.2的发布,不再支持此功能(这可能不是苹果推荐的)

我的客户坚持是/否切换。我很感激任何建议!

非常感谢

5 个答案:

答案 0 :(得分:24)

乌拉!从iOS 6开始,可以分别指定用于开/关状态的图像。因此,这可用于显示“是/否”图像(或表示您希望使用的文本的任何图像,而不是之前限制的开/关)。

 if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"6.0"))
 {
     [mySwitch setOnImage: [UIImage imageNamed:@"UISwitch-Yes"]];
     [mySwitch setOffImage:[UIImage imageNamed:@"UISwitch-No"]];
 }

图像应为77像素宽,27像素高,文本(每个状态一个图像)应在77像素宽度内水平居中。我对文本使用透明背景,所以我仍然可以使用背景的色调,这仍然适用于此。

当然,提供文本似乎更容易,而不是必须使用文本图像,但至少我非常感谢这个新选项。

答案 1 :(得分:20)

您需要为此实现自定义UISwitch。或者使用已经实现过的:)(检查this SO questionthis post

答案 2 :(得分:12)

弗拉基米尔的答案很棒,但我认为这里有更好的实施方式:https://github.com/domesticcatsoftware/DCRoundSwitch

除了设置自定义文本外,还可以更轻松地更改UISwitch的大小和颜色,从而获得更清晰的结果。

它是在MIT许可下发布的。看看吧!

答案 3 :(得分:8)

事实证明,您可以使用以下项目创建自定义UISwitch:

  • UIScrollView
  • A UIButton
  • 两个UILabels
  • 背景图片
  • 布尔值

首先,您需要将QuartzCore.framework添加到项目中,并#import <QuartzCore/QuartzCore.h>添加到视图控制器。

接下来,使用Interface Builder将UIScrollView添加到视图中。 ScrollView将是您的自定义UISwitch。 接下来,将按钮和两个标签添加到ScrollView。一个标签用于“是”,另一个用于“否”。

将图像添加到按钮并将其类型设置为自定义。这是我使用的图像:enter image description here

将标签放在图像的蓝色和白色区域上。调整ScrollView,使其足够大,以显示图像的蓝色部分和拇指按钮。

将以下行添加到viewDidLoad:

self.mySwitch.layer.cornerRadius = 13.5;

mySwitch是ScrollView的名称,13.5是ScrollView的一半高度。上面的语句将ScrollView更改为具有圆形末端,如UISwitch。

要使自定义开关处于活动状态,您需要将“Touch Up Inside”事件按钮绑定到IBAction。这是我在事件处理程序中使用的代码:

-(IBAction)mySwitchButton:(id)sender {
    self.myValue = !self.myValue;
    CGPoint scrollPoint = CGPointMake((self.myValue)? 43.0: 0, 0.0);
    [mySwitch setContentOffset:scrollPoint animated:YES];
}

其中myValue是包含开关状态的布尔变量,43.0是您必须移动图像以将开关置于关闭位置的点数。

这就是它的全部!

答案 4 :(得分:0)

从iOS 6开始,可以指定用于UISwitch开/关状态的图像,但不能指定文本。 由于翻译人员需要国际化,这将带来麻烦 必须为每种语言提供图像文本,而不是仅提供文本。 此外,UISwitch图像的大小是固定的,限制了文本长度。

由于上述原因,我喜欢JSWilson的答案:简单灵活。

为了减轻开发人员手动添加所需控件的需要,我编写了一个可以在我的GitHub存储库中找到的自定义CRDScrollSwitch类: https://github.com/corerd/CRDScrollSwitch