Лучшая реализация переключателя для IOS - PullRequest
45 голосов
/ 31 января 2011

Я хотел бы спросить, есть ли примеры того, как реализовать опции радио-кнопок в приложении для iPhone.

Мне кажется, Picker View довольно большой для простой функции выбора.

Я не уверен, намеренно ли Apple исключил переключатели, и лучше ли просто использовать Picker View с точки зрения удобства использования / взаимодействия с пользователем.

Ответы [ 9 ]

41 голосов
/ 22 сентября 2013

У меня есть мысли о том, как должна выглядеть лучшая реализация переключателя.Он может основываться на классе UIButton и использовать его состояние «выбранный» для обозначения одного из группы.UIButton имеет собственные параметры настройки в IB, поэтому удобно проектировать XIB.Также должен быть простой способ группировки кнопок с использованием выходных соединений IB:

Я реализовал свои идеи в этом классе RadioButton .Работает как шарм:

Загрузить пример проекта .

24 голосов
/ 09 февраля 2011

Попробуйте UISegmentedControl . Он работает аналогично переключателям - предоставляет множество вариантов выбора и позволяет пользователю выбрать 1.

18 голосов
/ 07 августа 2013

Просто хочу подвести итог, может быть 4 способа.

  • Если у вас мало места, добавьте событие щелчка для текста или кнопки, затем отобразите UIPickerView:

UIPickerView

илиоткройте новый элемент управления табличного представления с галочкой:

UITableView

  • Если есть больше места, добавьте табличное представление непосредственно к основному виду:

enter image description here

  • Окончательное решение использует UISegmentedControl:

enter image description here

Надеюсь, это поможет.

7 голосов
/ 08 октября 2014

Попробуйте DLRadioButton , работает для Swift и ObjC.Вы также можете использовать изображения, чтобы указать статус выбора или настроить свой собственный стиль.

Проверьте это на GitHub .

radio button for iOS

** Обновление: добавлена ​​опция для размещения индикатора выбора на правой стороне.

** Обновление: добавлена ​​квадратная кнопка, IBDesignable, улучшенопроизводительность.

** Обновление: добавлена ​​поддержка множественного выбора.

7 голосов
/ 31 января 2011

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

Если бы только UIPickerView можно было сделать чуть меньше, или их градиенты были бы немного лучше приспособлены для мозаики от двух достраница ...

6 голосов
/ 16 мая 2016

Я знаю, что уже очень поздно, чтобы ответить на этот вопрос, но надеюсь, что это может кому-нибудь помочь.

Вы можете создать кнопку, такую ​​как переключатель, используя IBOutletCollection.создайте одно свойство IBOutletCollection в нашем файле .h.

@property (nonatomic, strong) IBOutletCollection(UIButton) NSArray *ButtonArray;

соедините все кнопки с этим IBOutletCollection и создайте один метод IBAction для всех трех кнопок.

- (IBAction)btnTapped:(id)sender {
       for ( int i=0; i < [self.ButtonArray count]; i++) {
           [[self.ButtonArray objectAtIndex:i] setImage:[UIImage                         
            imageNamed:@"radio-off.png"]                 
            forState:UIControlStateNormal];
       }
     [sender setImage:[UIImage imageNamed:@"radio-on.png"]
      forState:UIControlStateNormal];
}
5 голосов
/ 31 августа 2012

Я написал контроллер для обработки логики за множеством переключателей.Это открытый исходный код, и на GitHub, проверьте его!

https://github.com/goosoftware/GSRadioButtonSetController

0 голосов
/ 27 февраля 2016

Следующий простой способ создать радио-кнопку в вашем приложении для iOS, выполните два шага.

Step1 - вставьте этот код в ваш viewDidLoad или любой другой желаемый метод

 [_mrRadio setSelected:YES];
        [_mrRadio setTag:1];
        [_msRadio setTag:1];
        [_mrRadio setBackgroundImage:[UIImage imageNamed:@"radiodselect_white.png"] forState:UIControlStateNormal];
        [_mrRadio setBackgroundImage:[UIImage imageNamed:@"radioselect_white.png"] forState:UIControlStateSelected];
        [_mrRadio addTarget:self action:@selector(radioButtonSelected:) forControlEvents:UIControlEventTouchUpInside];

        [_msRadio setBackgroundImage:[UIImage imageNamed:@"radiodselect_white.png"] forState:UIControlStateNormal];
        [_msRadio setBackgroundImage:[UIImage imageNamed:@"radioselect_white.png"] forState:UIControlStateSelected];
        [_msRadio addTarget:self action:@selector(radioButtonSelected:) forControlEvents:UIControlEventTouchUpInside];

Step2- Поместите следующий метод IBAction в ваш класс

-(void)radioButtonSelected:(id)sender
{
    switch ([sender tag ]) {
        case 1:
            if ([_mrRadio isSelected]==YES) {
              //  [_mrRadio setSelected:NO];
               // [_msRadio setSelected:YES];
               genderType = @"1";
            }
            else
            {
                [_mrRadio setSelected:YES];
                [_msRadio setSelected:NO];
                genderType = @"1";
            }
            break;
        case 2:
            if ([_msRadio isSelected]==YES) {
               // [_msRadio setSelected:NO];
               // [_mrRadio setSelected:YES];
                genderType = @"2";
            }
            else
            {
                [_msRadio setSelected:YES];
                [_mrRadio setSelected:NO];
                 genderType = @"2";
            }
            break;
        default:
            break;
    }
}
0 голосов
/ 21 сентября 2015
-(void)radiobutton:(id)sender
{
ischecked =!ischecked;
UIButton *check = (UIButton*)sender;
if(ischecked == NO)
    [check setImage:[UIImage imageNamed:@"checkbox1.png"] forState:UIControlStateNormal];
else 
    [check setImage:[UIImage imageNamed:@"checkbox-pressed.png"] forState:UIControlStateNormal];
}
...