UISwitch - изменить с вкл / выкл на да / нет - PullRequest
18 голосов
/ 01 декабря 2010

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

Я сделал это с

            ((UILabel *)[[[[[[switchControl subviews] lastObject] subviews] objectAtIndex:2] subviews] objectAtIndex:0]).text = @"Yes";
        ((UILabel *)[[[[[[switchControl subviews] lastObject] subviews] objectAtIndex:2] subviews] objectAtIndex:1]).text = @"No";

Однако, с выпуском iOS4.2, это больше не поддерживается (это, вероятно, в любом случае не рекомендуется Apple)

Мой клиент настаивает на переключателях да / нет.Буду признателен за любой совет!

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

Ответы [ 5 ]

24 голосов
/ 16 ноября 2012

Ура! Начиная с iOS 6, можно указать изображение, которое будет использоваться для состояний включения / выключения соответственно. Таким образом, это можно использовать для отображения изображения ДА / НЕТ (или любого изображения, представляющего текст, который вы предпочитаете использовать вместо ранее ограниченного ВКЛ / ВЫКЛ).

 if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"6.0"))
 {
     [mySwitch setOnImage: [UIImage imageNamed:@"UISwitch-Yes"]];
     [mySwitch setOffImage:[UIImage imageNamed:@"UISwitch-No"]];
 }

Изображения должны иметь ширину 77 пикселей и высоту 27 пикселей, а текст (по одному изображению для каждого состояния) должен быть центрирован по горизонтали в пределах ширины 77 пикселей. Я использую прозрачные фоны для текста, поэтому я все еще могу использовать оттенок для фона, который все еще работает с этим.

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

20 голосов
/ 01 декабря 2010

Для этого вам нужно реализовать свой собственный UIS-переключатель. Или используйте один из уже реализованных :) (отметьте этот вопрос и этот пост )

12 голосов
/ 01 мая 2012

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

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

Выпущено по лицензии MIT. Посмотри!

8 голосов
/ 03 мая 2012

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

  • A 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 - это число точек, на которые вам нужно переместить изображение, чтобы перевести переключатель в положение выключения.

Вот и все!

0 голосов
/ 04 июня 2013

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

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

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

...