18

有谁知道我可以将打开和关闭的文本标签更改为是和否的方法。

我做到了

            ((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 的发布,不再支持此功能(Apple 可能不建议这样做)

我的客户坚持是/否开关。我会很感激任何建议!

非常感谢

4

5 回答 5

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 px 宽,27 px 高,并且文本(每个状态一个图像)应在 77 px 宽度内水平居中。我为文本使用透明背景,所以我仍然可以使用背景的色调,这仍然适用。

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

于 2012-11-16T01:46:36.043 回答
20

您需要为此实现自定义 UISwitch。或者使用已经实现的一个:)(检查这个SO问题这个帖子

于 2010-12-01T14:13:20.023 回答
12

弗拉基米尔的回答很好,但以我的拙见,这里有一个更好的实现:https ://github.com/domesticcatsoftware/DCRoundSwitch 。

除了设置自定义文本外,更改 UISwitch 的大小和颜色更容易,您会得到更清晰的结果。

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

于 2012-04-30T20:33:41.250 回答
8

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

  • 一个 UIScrollView
  • 一个 UIButton
  • 两个 UILabel
  • 背景图像
  • 布尔值

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

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

将图像添加到按钮并将其类型设置为自定义。这是我使用的图像:在此处输入图像描述

将标签放置在图像的蓝色和白色区域上。调整 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 是您必须移动图像以将开关置于关闭位置的点数。

这就是它的全部!

于 2012-05-03T18:26:14.050 回答
0

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

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

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

于 2013-06-04T03:24:18.970 回答