在iOS 4.2中更改UISwitch文本

我正在尝试更改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"; 

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

谢谢。

不要这样做。 操纵框架控件的私有视图层次是绝对不受支持的,并且可能导致与操作系统更新不兼容。 特别是因为你的代码绝对没有对层次结构进行validation,所以如果子视图的数量或types与你所期望的不一致,那么你很容易崩溃。

我从这里用这个代码发现了4.2的成功。 它的子类UISlider(而不是UISwitch)来实现看起来像定制的UISwitch相同的效果。

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

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

尝试使用可定制的开源UISwitchreplace。

这似乎是相当不错的: GitHub上的DCRoundSwitch ,但是GitHub上还有更多,如果这不起作用。

这种types的方法不具有相同的不兼容性问题,因为它实现了交换机的function和绘图本身,只依赖于UIControl基本类的核心function。 唯一可能需要不时更新的是你正在使用的库(DCRoundSwitch),但是像UIControl和Quartz绘图这样的基本function是相当成熟的,很less发生变化,所以这可以安全地被认为是一个罕见的和最小的风险因素。