我正在尝试更改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对象。
感谢。
答案 0 :(得分:14)
不要这样做。操作框架控件的私有视图层次结构绝对不受支持,并且可能导致与OS更新不兼容。特别是因为您的代码绝对没有验证层次结构,所以如果子视图的数量或类型与您期望的不匹配,您很容易崩溃。
答案 1 :(得分:7)
我在this code from here的4.2中找到了成功。它将UISlider(不是UISwitch)子类化,以实现与自定义UISwitch相同的效果。
答案 2 :(得分:1)
似乎还没有支持的方式来更改TEXT,但您可以通过设置iOS 6中引入的onImage
和offImage
属性来更改显示的内容
答案 3 :(得分:0)
尝试使用可自定义的开源UISwitch替换。
这个看起来很不错:DCRoundSwitch on GitHub,但如果那个不起作用,GitHub还有很多。
这种方法没有相同的不兼容问题,因为它实现了交换机的功能和绘图本身,并且只依赖于核心功能UIControl基类。您可能需要不时更新的唯一内容是您正在使用的库(DCRoundSwitch),但是,UIControl和Quartz绘图等基本功能已经建立并且很少更改,因此可以安全地将其视为罕见且极小的风险因素
答案 4 :(得分:0)
最新版本的XCode Beta 4刚刚添加了对在UISwitch上更改文本的支持。还有一个SwtichStyle,我还没有调查过那里的样式。