4

我正在尝试更改 UISwitch 中的文本。来自网站的示例(更改 UISwitch 上的文本)工作正常,但是当我将我的 xcode 升级到 3.2.5 和 iOS 4.2 时,当调用函数来更改文本时应用程序崩溃。我正在使用网站上的以下示例。

例如。

((UILabel *)[[[[[[_agreeAgb subviews] lastObject] subviews] objectAtIndex:2] subviews] objectAtIndex:0]).text = @"Foo";
((UILabel *)[[[[[[_agreeAgb subviews] lastObject] subviews] objectAtIndex:2] subviews] objectAtIndex:1]).text = @"Bar";

抛出的异常是因为遇到空对象。

谢谢。

4

5 回答 5

14

不要这样做。绝对不支持操纵框架控件的私有视图层次结构,并且可能导致与操作系统更新不兼容。尤其是当您的代码完全没有对层次结构进行验证时,因此如果子视图的数量或类型与您的期望不匹配,您很容易崩溃。

于 2011-01-26T20:09:10.180 回答
7

我在 4.2 中使用这里的代码找到了成功。它是 UISlider(不是 UISwitch)的子类,以实现看起来与自定义 UISwitch 相同的效果。

于 2011-02-03T17:06:36.573 回答
1

似乎还没有支持更改 TEXT 的方法,但是您可以通过设置onImageoffImage属性来更改显示的内容,在 iOS 6 中引入

http://developer.apple.com/library/ios/documentation/uikit/reference/UISwitch_Class/Reference/Reference.html

于 2013-01-25T21:15:46.230 回答
0

尝试使用可定制的开源 UISwitch 替代品。

这个看起来不错:GitHub 上的 DCRoundSwitch,但如果那个不起作用,GitHub 上还有更多。

这种方法没有相同的不兼容问题,因为它实现了开关的功能和绘图本身,并且只依赖于核心功能 UIControl 基类。您可能需要不时更新的唯一内容是您正在使用的库 (DCRoundSwitch),但是,UIControl 和 Quartz 绘图等基本功能已经非常成熟并且很少更改,因此可以安全地将其视为罕见且最小的风险因素.

于 2013-04-04T20:43:15.077 回答
0

最新版本的 XCode Beta 4 刚刚添加了对 UISwitch 上更改文本的支持。还有一个 SwtichStyle,我还没有调查过那里有哪些样式。

于 2020-08-11T17:33:56.760 回答