有没有人知道我可以将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的发布,不再支持此功能(这可能不是苹果推荐的)
我的客户坚持是/否切换。我很感激任何建议!
非常感谢答案 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 question和this post)
答案 2 :(得分:12)
弗拉基米尔的答案很棒,但我认为这里有更好的实施方式:https://github.com/domesticcatsoftware/DCRoundSwitch。
除了设置自定义文本外,还可以更轻松地更改UISwitch的大小和颜色,从而获得更清晰的结果。
它是在MIT许可下发布的。看看吧!
答案 3 :(得分:8)
事实证明,您可以使用以下项目创建自定义UISwitch:
首先,您需要将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是您必须移动图像以将开关置于关闭位置的点数。
这就是它的全部!
答案 4 :(得分:0)
从iOS 6开始,可以指定用于UISwitch开/关状态的图像,但不能指定文本。 由于翻译人员需要国际化,这将带来麻烦 必须为每种语言提供图像文本,而不是仅提供文本。 此外,UISwitch图像的大小是固定的,限制了文本长度。
由于上述原因,我喜欢JSWilson的答案:简单灵活。
为了减轻开发人员手动添加所需控件的需要,我编写了一个可以在我的GitHub存储库中找到的自定义CRDScrollSwitch类: https://github.com/corerd/CRDScrollSwitch