UISegmentedControl ошибка делителя

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

Вниз, по цели:

Вниз по цели

Вниз, оттянутый палец от цели:

Вниз с цели

Учитывая, что 0 означает нормальное состояние, 1 выбранное состояние и 2 выделенное состояние; У меня есть все правильные изображения разделителей, и я устанавливаю их для каждого случая, то есть:

00, 01, 02 10, 11, 12 20, 21, 22 

Все остальное отлично работает, если я коснусь и удерживаю цель, проблем нет. Я не ожидаю, что пользователи будут прослушивать и перетаскивать, но я предпочел бы, чтобы это было разрешено. Кто-нибудь испытал это раньше?

Нет необходимости предоставлять изображения разделителей для состояний «11» и «22», поскольку логически вы не можете иметь 2 смежных выделенных сегмента или 2 смежных выделенных сегмента. Ну, только если одновременное нажатие смежных сегментов выделит их оба, но вряд ли.

Поэтому вы должны иметь следующие разделительные образы:

 00, 01, 02 10, --, 12 20, 21, -- 

Кроме того, у вас также должно быть 3 фоновых изображения для всех трех разных состояний (Normal, Selected и Highlighted). Причина этих фоновых изображений, а также то, как их создать, я объяснил здесь (в этом объяснении я использовал только 2 фоновых изображения для состояний Normal и Selected, но если вы хотите использовать выделенное состояние, вам нужно добавить третий фоновый рисунок ).

Вот диаграмма, показывающая, как эти изображения используются в UISegmentedControl: введите описание изображения здесь

А затем установите их, используя следующие методы внешнего вида:

 // Set background images [segmentedControl setBackgroundImage:background_image_normal forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; [segmentedControl setBackgroundImage:background_image_selected forState:UIControlStateSelected barMetrics:UIBarMetricsDefault]; [segmentedControl setBackgroundImage:background_image_highlighted forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault]; // Set divider images 0=Normal 1=Selected 2=Highlighted [segmentedControl setDividerImage:divider_image_00 forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateNormal barMetrics:UIBarMetricsDefault] [segmentedControl setDividerImage:divider_image_01 forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateSelected barMetrics:UIBarMetricsDefault] [segmentedControl setDividerImage:divider_image_10 forLeftSegmentState:UIControlStateSelected rightSegmentState:UIControlStateNormal barMetrics:UIBarMetricsDefault] [segmentedControl setDividerImage:divider_image_02 forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault] [segmentedControl setDividerImage:divider_image_20 forLeftSegmentState:UIControlStateHighlighted rightSegmentState:UIControlStateNormal barMetrics:UIBarMetricsDefault] [segmentedControl setDividerImage:divider_image_12 forLeftSegmentState:UIControlStateSelected rightSegmentState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault] [segmentedControl setDividerImage:divider_image_21 forLeftSegmentState:UIControlStateHighlighted rightSegmentState:UIControlStateSelected barMetrics:UIBarMetricsDefault] 

Возможное решение состоит в том, чтобы вручную подклассифицировать UISegmentedControl и переопределять его, чтобы убедиться, что состояние делителя правильно «очищено» при вызове событий UIResponder. Может быть, сегмент ожидает, что touchsMoved событие произойдет в тех же границах, что и начальные штрихиBegan.

Не забывайте, что UIControlStateSelected | UIControlStateHighlighted

 // Set background images UIImage *normalBackgroundImage = [UIImage imageNamed:@"segmented-background-unselected"]; UIImage *selectedBackgroundImage = [UIImage imageNamed:@"segmented-background-selected"]; [self setBackgroundImage:normalBackgroundImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; [self setBackgroundImage:selectedBackgroundImage forState:UIControlStateSelected barMetrics:UIBarMetricsDefault]; [self setBackgroundImage:normalBackgroundImage forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault]; [self setBackgroundImage:selectedBackgroundImage forState:UIControlStateSelected | UIControlStateHighlighted barMetrics:UIBarMetricsDefault]; // Set divider images UIImage *buttonImageLeftSelected = [UIImage imageNamed:@"segmented-left-selected"]; UIImage *buttonImageNoneSelected = [UIImage imageNamed:@"segmented-none-selected"]; UIImage *buttonImageRightSelected = [UIImage imageNamed:@"segmented-right-selected"]; [self setDividerImage:buttonImageNoneSelected forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; [self setDividerImage:buttonImageLeftSelected forLeftSegmentState:UIControlStateSelected rightSegmentState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; [self setDividerImage:buttonImageLeftSelected forLeftSegmentState:UIControlStateSelected | UIControlStateHighlighted rightSegmentState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; [self setDividerImage:buttonImageLeftSelected forLeftSegmentState:UIControlStateSelected rightSegmentState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault]; [self setDividerImage:buttonImageRightSelected forLeftSegmentState:UIControlStateHighlighted rightSegmentState:UIControlStateSelected barMetrics:UIBarMetricsDefault]; [self setDividerImage:buttonImageRightSelected forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateSelected | UIControlStateHighlighted barMetrics:UIBarMetricsDefault]; [self setDividerImage:buttonImageRightSelected forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateSelected barMetrics:UIBarMetricsDefault]; 
  • Как установить цвет оттенка текста только выбранного сегмента с помощью Swift?
  • Как UISegmentedControl изменяет размеры своих изображений контента?
  • UISegmentedControl, встроенный в UINavigationBar / Item
  • iOS 7 - UISegmentedControl не остался выделенным?
  • Текст UISegmentedControl с несколькими строками
  • UISegmentedControl текст с несколькими строками?
  • Элемент управления с сегментированным сегментом штрих-кода имеет дополнение в панели инструментов на реальном устройстве iOS7 iphone 5s
  • Полностью удалите разделители UISegmentedControl. (iphone)
  • Как перейти к 2 представлениям на основе Segmented Control и кнопки Add?
  • Проблема с выравниванием текста при установке пользовательского шрифта
  • Как отобразить только нижнюю границу для выбранного элемента в UISegmentedControl?
  • Давайте будем гением компьютера.