在iOS 4.2中更改UISwitch文本

时间:2011-01-26 16:04:07

标签: xcode ios uiswitch

我正在尝试更改UISwitch中的文本。来自网站(Changing the text on a 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";

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

感谢。

5 个答案:

答案 0 :(得分:14)

不要这样做。操作框架控件的私有视图层次结构绝对不受支持,并且可能导致与OS更新不兼容。特别是因为您的代码绝对没有验证层次结构,所以如果子视图的数量或类型与您期望的不匹配,您很容易崩溃。

答案 1 :(得分:7)

我在this code from here的4.2中找到了成功。它将UISlider(不是UISwitch)子类化,以实现与自定义UISwitch相同的效果。

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

尝试使用可自定义的开源UISwitch替换。

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

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

答案 4 :(得分:0)

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