Изменение текста UISwitch в iOS 4.2 - PullRequest
4 голосов
/ 26 января 2011

Я пытаюсь изменить текст в 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 ]

14 голосов
/ 26 января 2011

Не делай этого.Манипулирование частной иерархией представления элементов управления каркасом абсолютно не поддерживается и может привести к несовместимости с обновлениями ОС.Тем более, что ваш код абсолютно не проверяет иерархию, поэтому вы можете легко потерпеть крах, если количество или тип подпредставлений не соответствует ожидаемому.

7 голосов
/ 03 февраля 2011

Я нашел успех в 4.2 с этот код отсюда . Это подкласс UISlider (не UISwitch) для достижения эффекта, который выглядит так же, как настраиваемый UISwitch.

1 голос
/ 26 января 2013

Пока еще не существует поддерживаемого способа изменить ТЕКСТ, но вы можете изменить отображаемое, установив свойства onImage и offImage, представленные в iOS 6

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

0 голосов
/ 05 апреля 2013

Попробуйте использовать настраиваемую замену UISwitch с открытым исходным кодом.

Это выглядит довольно неплохо: DCRoundSwitch на GitHub , но на GitHub есть много других, если этот не работает.

Этот тип подхода не имеет таких проблем несовместимости, потому что он реализует функциональность коммутатора и сам отрисовку и опирается только на базовую функциональность базового класса UIControl. Единственное, что вам может понадобиться время от времени обновлять, - это используемая вами библиотека (DCRoundSwitch), однако базовые функции, такие как UIControl и Quartz Drawing, достаточно устоялись и меняются редко, поэтому их можно смело считать редким и минимальным фактором риска .

...