27

我需要在项目中实现自定义开关。目前我发现我们不能用 UISwitch 改变实现方式,如下图所示。我已经关注帖子并通过 stackoverflow 和其他博客搜索,但没有找到所需的解决方案。一种方法是使用本文中的 UISegmented 控件,但这也不能解决我的问题。

在此处输入图像描述

提前感谢您的帮助

4

4 回答 4

26

正如gasparuff所说,您也可以使用UIButton来完成,只需设置图像:

[button setImage:[UIImage imageNamed:@"image_on"] forState:UIControlStateSelected];
[button setImage:[UIImage imageNamed:@"image_off"] forState:UIControlStateNormal];

当它被点击时,只需切换选定的属性。

- (void) buttonTap {
    button.selected = !button.selected;
}

这将自动更改图像。

于 2013-04-29T14:59:17.960 回答
26

创建自己的交换机并不难。UISwitch 是一个控件——本质上只是一个发送消息的视图——具有两种状态。您可以像这样设置自己的自定义控件:

  • 容器视图:带有圆角的简单视图(设置cornerRadius视图层的)和背景颜色

  • left image:一个图像视图,显示您要在左侧显示的图像,即您的示例的复选标记

  • 右图:一个图像视图,显示您要在右侧显示的图像,即您的示例的 X 标记

  • 滑块:显示开关滑块部分的图像视图,设置在其他两个图像视图之上

当用户点击或滑动控件时,使用 Core Animation 将滑块移动到开关的另一侧并更新控件的状态并快速淡入新状态的背景颜色。将控件的操作发送到目标。

于 2013-04-29T15:02:18.190 回答
2

你知道-[UISwitch setOnImage:]-[UISwitch setOffImage:],对吧?也-[UISwitch setTintColor]。我能看到的唯一缺点是开关本身将是标准的 iOS 开关(圆形按钮),否则,这将是最类似于 iOS 的解决方案。

在实现自己的 on/offImage 时,请记住尺寸限制,并且图像朝向开关的一侧是凹的。 tintColor可用于使开关的其余部分反映您的配色方案。您可能想要跟踪valueChanged事件,因此更改色调颜色。

如果您需要在问题中显示的确切外观(方形开关按钮),那么您可能想要使用自定义控件,正如@Caleb 建议的那样。

于 2013-06-27T17:39:02.740 回答
0

看起来您只希望您的控件只有 2 种状态 - 启用和禁用。

一种简单的方法是创建 2 个 png 图像并使用带有背景图像的自定义 UIButton 并在每次点击按钮时替换这 2 个图像。

这是你想要做的还是我误解了什么?

于 2013-04-29T14:55:46.797 回答