Как вы создаете UIBarButtonItems с радиоинтерфейсом? - PullRequest
1 голос
/ 14 ноября 2009

У меня есть UIToolbar, которому нужны три кнопки в стиле радио, что означает, что из трех кнопок одновременно может быть нажата только одна кнопка. В документации делается ссылка на возможность настройки радио UIBarButtonItems в определении ссылки на класс свойства width:

Если значение этого свойства положительное, ширина объединенного изображения и Название исправлено. Если значение 0,0 или отрицательный, элемент устанавливает ширину объединенного изображения и заголовка поместиться. Это свойство игнорируется, если Стиль использует режим радио. По умолчанию значение 0,0.

Тем не менее, я нашел «радио» в UIKit Framework Reference, и не могу найти упоминания UIBarButtonItems в стиле радио. Я знаю, что я мог бы альтернативно использовать TabBar для радиоинтерфейса, но TabBar не совсем соответствует назначению моего пользовательского интерфейса (обычные кнопки + переключатели). Я вижу, что приложение Календарь использует UIBarButtonItems в стиле радио (Список, День, Месяц), поэтому кажется, что это должно быть где-то в API и одобрено HIG. Это где-то скрывается или мне придется создавать UIBarButtonItems с пользовательскими представлениями?

Ответы [ 3 ]

7 голосов
/ 14 ноября 2009

UISegmentedControl - это то, что вы хотите. Это как-то скрывается в Интерфейсном Разработчике, так как это другой стиль вне панели инструментов.

Нормальный стиль:

normal segmented control

То же самое на панели инструментов:

bar segmented control

У вас есть два варианта его поведения: мгновенное выделение при нажатии или поведение в стиле радио, что вам нужно. Вы можете установить это с помощью флажка «Мгновенный» в инспекторе Атрибутов:

segmented control attributes

1 голос
/ 14 ноября 2009

Рассматривали ли вы попробовать UISegmentedControl? Вы можете настроить его так, чтобы одновременно нажимался только один из сегментов.

0 голосов
/ 06 февраля 2012

Если вам нужно сделать это в режиме реального времени

  1. Создайте массив параметров с возможностью выбора радиокнопки
  2. создайте и поместите ваш UISegmentedControl в элемент UIBarButtonItem.
  3. добавьте этот UIBarButtonItem к вашему навигационному элементу

работал на меня. Код ниже

NSArray *itemArray = [NSArray arrayWithObjects: @"One", @"Two", @"Three", nil];
UISegmentedControl *segmentedControl = [[UISegmentedControl alloc] initWithItems:itemArray];
segmentedControl.frame = CGRectMake(35, 200, 250, 50);
segmentedControl.segmentedControlStyle = UISegmentedControlStylePlain;
segmentedControl.selectedSegmentIndex = 1;

// Uncomment this part if you need to do something when ratio state is selected. Also paste the function at the end of this post somewhere in your class.
// [segmentedControl addTarget:self   action:@selector(pickOne:) forControlEvents:UIControlEventValueChanged];

UIBarButtonItem *bbi= [[UIBarButtonItem alloc] initWithCustomView:segmentedControl];
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:segmentedControl];
[segmentedControl release];


/* 
//and paste this function somethere in your class. It prints the label in debug terminal
- (void) pickOne:(id)sender{
UISegmentedControl *segmentedControl = (UISegmentedControl *)sender;
NSLog(@"%@", [segmentedControl titleForSegmentAtIndex: [segmentedControl selectedSegmentIndex]]);
} 
*/

Я использовал код из этого (не моего) поста http://howtomakeiphoneapps.com/here-is-how-you-use-the-segmented-control-uisegmentedcontrol/129/

...