Подтвердить что ты не робот

UISwitch - переход от включения/выключения к да/нет

Кто-нибудь знает, как я могу изменить текстовую метку для включения и выключения на "да" и "нет".

Я сделал это с помощью

            ((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. Я был бы признателен за любые советы!

большое спасибо

4b9b3361

Ответ 1

Для этого вам нужно реализовать свой пользовательский интерфейс UISwitch. Или используйте один из уже реализованных:) (проверьте этот вопрос SO и этот пост)

Ответ 2

Ура! Из 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. Я использую прозрачный фон для текста, поэтому я все еще могу использовать оттенок для фона, который все еще работает с этим.

Конечно, было бы проще просто предоставить текст, вместо того, чтобы использовать образ текста, но я, конечно же, благодарен за этот новый вариант.

Ответ 3

Владимир ответ велик, но по моему скромному мнению здесь есть еще лучшая реализация: https://github.com/domesticcatsoftware/DCRoundSwitch.

Помимо настройки пользовательского текста, легче изменить размер и цвет UISwitch, и вы получите более резкий результат.

Он выпущен под лицензией MIT. Посмотрите!

Ответ 4

Оказывается, вы можете создать пользовательский UISwitch со следующими элементами:

  • UIScrollView
  • A UIButton
  • Два UILabels
  • Фоновое изображение
  • Логическое значение

Сначала вам нужно добавить QuartzCore.framework к вашему проекту и #import <QuartzCore/QuartzCore.h> к вашему контроллеру вида.

Затем добавьте UIScrollView к вашему представлению с помощью Interface Builder. ScrollView будет вашим пользовательским UISwitch. Затем добавьте кнопку и две метки в свой ScrollView. Один ярлык будет для "да" другого для "нет".

Добавьте изображение к кнопке и установите ее тип в обычном. Это изображение, которое я использую: enter image description here

Поместите надписи на синюю и белую область изображения. Отрегулируйте 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 - количество точек, которые вам нужно будет переместить, чтобы перевести переключатель в положение "выключено".

Это все, что нужно!

Ответ 5

Из iOS 6 можно указать изображение, которое будет использоваться для состояний включения/выключения UISwitch, но НЕ для текста. Это вызовет проблемы, когда требуется интернационализация, поскольку переводчики должны предоставить текст изображения для каждого языка, а не только текст. Кроме того, размер изображения UISwitch фиксирован, что ограничивает длину текста.

Из-за вышеуказанных причин мне нравится ответ JSWilson: простой и гибкий.

Чтобы избавить разработчиков от необходимости вручную добавлять необходимые элементы управления, я закодировал собственный класс CRDScrollSwitch, который вы можете найти в моем репозитории GitHub: https://github.com/corerd/CRDScrollSwitch