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

kri*_*son 18 iphone uiswitch

有没有人知道我可以改变开启和关闭文本标签的方式是和否.

我做到了

            ((UILabel *)[[[[[[switchControl subviews] lastObject] subviews] objectAtIndex:2] subviews] objectAtIndex:0]).text = @"Yes";
        ((UILabel *)[[[[[[switchControl subviews] lastObject] subviews] objectAtIndex:2] subviews] objectAtIndex:1]).text = @"No";
Run Code Online (Sandbox Code Playgroud)

但是,随着iOS 4.2的发布,不再支持此功能(这可能不是Apple推荐的)

我的客户坚持使用是/否开关.我很感激任何建议!

非常感谢

Sni*_*ips 24

欢呼!从iOS 6开始,可以分别指定用于开/关状态的图像.因此,这可用于显示YES/NO图像(或表示您希望使用的文本的任何图像,而不是之前限制的ON/OFF).

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

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

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

  • 如果你只需要一些快速的英文YES/NO图像,这里是我使用的图像.随意抓住它们.http://www.duneparksoftware.com/UISwitch-No.png | http://www.duneparksoftware.com/UISwitch-No@2x.png | http://www.duneparksoftware.com/UISwitch-Yes.png | http://www.duneparksoftware.com/UISwitch-Yes@2x.png (13认同)

Vla*_*mir 20

您需要为此实现自定义UISwitch.或使用已经实现的:):检查这个问题这篇文章)


Xav*_*Gil 12

弗拉基米尔的答案很棒,但在我看来,这里有更好的实现:https://github.com/domesticcatsoftware/DCRoundSwitch.

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

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


JSW*_*son 8

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

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

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

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

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

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

将以下行添加到viewDidLoad:

self.mySwitch.layer.cornerRadius = 13.5;
Run Code Online (Sandbox Code Playgroud)

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];
}
Run Code Online (Sandbox Code Playgroud)

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

这就是它的全部!