我需要在项目中实现自定义开关。目前我发现我们无法改变UISwitch的实现方式,如下图所示。我已经关注帖子并通过stackoverflow和其他博客搜索,但没有找到所需的解决方案。一种方法是在this帖子中使用UISegmented控件,但这也不能解决我的问题。
提前感谢您提供任何帮助
答案 0 :(得分:22)
创建自己的交换机有什么困难? UISwitch是一个控件,基本上只是一个发送消息的视图 - 具有两个状态。您可以这样设置:
容器视图:带圆角的简单视图(设置视图图层的cornerRadius
)和背景颜色
左图:显示您想要在左侧显示的图像的图像视图,即示例的复选标记
右图:显示您想要在右侧显示的图像的图像视图,即示例中的X标记
滑块:显示开关滑块部分的图像视图,设置在其他两个图像视图上方
当用户点击或滑动控件时,使用Core Animation将滑块移动到开关的另一侧并更新控件的状态,并快速淡入新状态的背景颜色。将控件的操作发送给目标。
答案 1 :(得分:20)
正如gasparuff所说,你也可以用UIButton来做,只需设置图像:
[button setImage:[UIImage imageNamed:@"image_on"] forState:UIControlStateSelected];
[button setImage:[UIImage imageNamed:@"image_off"] forState:UIControlStateNormal];
并点击它时只需切换选定的属性。
- (void) buttonTap {
button.selected = !button.selected;
}
会自动更改图像。
答案 2 :(得分:1)
看起来你只想让你的控件只有2个状态 - 启用和禁用。
一种简单的方法是创建2个png图像并使用带有背景图像的自定义UIButton,并在每次点击按钮时替换这2个图像。
这是你想要做的事情,还是我误解了什么?
答案 3 :(得分:1)
您了解-[UISwitch setOnImage:]
和-[UISwitch setOffImage:]
,对吗?还-[UISwitch setTintColor]
。关于唯一的缺点我可以看到,交换机本身将是标准的iOS交换机(圆形按钮),但是,否则,这将是最类似iOS的解决方案。
实现自己的on / offImage时,请记住尺寸限制,并且图像朝向开关的一侧是凹的。 tintColor
可用于使交换机的其余部分反映您的配色方案。您可能希望跟踪valueChanged
事件,以便更改色调颜色。
如果您需要在问题中显示的确切外观(方形切换按钮),那么您可能想要使用自定义控件,如@Caleb建议的那样。