Ответ 1
Для этого вам нужно реализовать свой пользовательский интерфейс UISwitch. Или используйте один из уже реализованных:) (проверьте этот вопрос SO и этот пост)
Кто-нибудь знает, как я могу изменить текстовую метку для включения и выключения на "да" и "нет".
Я сделал это с помощью
((UILabel *)[[[[[[switchControl subviews] lastObject] subviews] objectAtIndex:2] subviews] objectAtIndex:0]).text = @"Yes";
((UILabel *)[[[[[[switchControl subviews] lastObject] subviews] objectAtIndex:2] subviews] objectAtIndex:1]).text = @"No";
Однако с выпуском iOS 4.2 это больше не поддерживается (это, вероятно, не рекомендовалось Apple в любом случае)
Мой клиент настаивает на включении переключателей yes/no. Я был бы признателен за любые советы!
большое спасибо
Для этого вам нужно реализовать свой пользовательский интерфейс UISwitch. Или используйте один из уже реализованных:) (проверьте этот вопрос SO и этот пост)
Ура! Из iOS 6 можно указать изображение, которое будет использоваться для состояний включения/выключения, соответственно. Таким образом, это может использоваться для отображения изображения YES/NO (или любого изображения, представляющего текст, который вы предпочитаете использовать, вместо ранее ограниченного включения/выключения).
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"6.0"))
{
[mySwitch setOnImage: [UIImage imageNamed:@"UISwitch-Yes"]];
[mySwitch setOffImage:[UIImage imageNamed:@"UISwitch-No"]];
}
Изображения должны быть 77 px в ширину, 27 пикселей в высоту, а текст (по одному изображению для каждого состояния) должен быть горизонтально центрирован в пределах этой ширины 77 px. Я использую прозрачный фон для текста, поэтому я все еще могу использовать оттенок для фона, который все еще работает с этим.
Конечно, было бы проще просто предоставить текст, вместо того, чтобы использовать образ текста, но я, конечно же, благодарен за этот новый вариант.
Владимир ответ велик, но по моему скромному мнению здесь есть еще лучшая реализация: https://github.com/domesticcatsoftware/DCRoundSwitch.
Помимо настройки пользовательского текста, легче изменить размер и цвет UISwitch, и вы получите более резкий результат.
Он выпущен под лицензией MIT. Посмотрите!
Оказывается, вы можете создать пользовательский UISwitch со следующими элементами:
Сначала вам нужно добавить QuartzCore.framework к вашему проекту и #import <QuartzCore/QuartzCore.h>
к вашему контроллеру вида.
Затем добавьте UIScrollView к вашему представлению с помощью Interface Builder. ScrollView будет вашим пользовательским UISwitch. Затем добавьте кнопку и две метки в свой ScrollView. Один ярлык будет для "да" другого для "нет".
Добавьте изображение к кнопке и установите ее тип в обычном. Это изображение, которое я использую:
Поместите надписи на синюю и белую область изображения. Отрегулируйте ScrollView так, чтобы он был достаточно большим, чтобы показать синюю часть изображения и большой палец.
Добавьте следующую строку в viewDidLoad:
self.mySwitch.layer.cornerRadius = 13.5;
mySwitch - это имя ScrollView, а 13.5 - половина высоты ScrollView. Вышеупомянутый оператор изменяет ScrollView на округленные концы, такие как UISwitch.
Чтобы активировать настраиваемый коммутатор, вам нужно привязать кнопки "Touch Up Inside" к IBAction. Вот код, который я использую в обработчике событий:
-(IBAction)mySwitchButton:(id)sender {
self.myValue = !self.myValue;
CGPoint scrollPoint = CGPointMake((self.myValue)? 43.0: 0, 0.0);
[mySwitch setContentOffset:scrollPoint animated:YES];
}
Где myValue - это логическая переменная, которая содержит состояние вашего коммутатора, а 43.0 - количество точек, которые вам нужно будет переместить, чтобы перевести переключатель в положение "выключено".
Это все, что нужно!
Из iOS 6 можно указать изображение, которое будет использоваться для состояний включения/выключения UISwitch, но НЕ для текста. Это вызовет проблемы, когда требуется интернационализация, поскольку переводчики должны предоставить текст изображения для каждого языка, а не только текст. Кроме того, размер изображения UISwitch фиксирован, что ограничивает длину текста.
Из-за вышеуказанных причин мне нравится ответ JSWilson: простой и гибкий.
Чтобы избавить разработчиков от необходимости вручную добавлять необходимые элементы управления, я закодировал собственный класс CRDScrollSwitch, который вы можете найти в моем репозитории GitHub: https://github.com/corerd/CRDScrollSwitch