UISegmentedControl.enabled = NO не затемняет - PullRequest
5 голосов
/ 13 августа 2011

У меня есть UISegmentedControl в UIView в моем поповере, который я хочу отключить в некоторых случаях. Сегментированный элемент управления настраивается с помощью Interface Builder в файле пера. Проверяется чековая книжка IB «Включено».

Чтобы отключить его, я написал:

self.segmentedControl.enabled = NO;  // or YES when I want it enabled

Что работает в той мере, в которой сегментированный элемент управления не реагирует на события касания.

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

Это должно быть возможно, так как отключение UISegmentedControl с помощью Interface Builder дает желаемый эффект затемнения.

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

self.segmentedControl.enabled = YES;

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

Это как если бы IB «включен» флажок контроллера двух свойств: enabled и dimmed. Но что это за свойство dimmed, которое я не могу найти?

Что я пропустил?

Это в симуляторе iPad 4.3.

(обратите внимание, что я имею в виду весь элемент управления, а не отдельные его сегменты).

Редактировать: Я провел дальнейшие исследования и обнаружил, что отключение сегментированного элемента управления в IB также устанавливает его свойство alpha равным 0,5.

При добавлении:

self.segmentedControl.alpha = 0.5; // or 1.0 if enabled

Мое приложение теперь работает нормально.

Правильно ли я считаю, что установка свойства enabled должна также учитывать внешний вид экрана?

Ответы [ 2 ]

8 голосов
/ 01 сентября 2011

Я обнаружил, что это работает для каждого сегмента:

[self.segmentedControl setEnabled:NO forSegmentAtIndex:0];

Эффект неуловимый, но затеняет его. Чтобы сделать все сегменты:

for(int index=0; index<self.segmentedControl.numberOfSegments; index++)
{
    [self.segmentedControl setEnabled:NO forSegmentAtIndex:index];
}
5 голосов
/ 20 декабря 2011

Я столкнулся с точно такой же проблемой, с интересным поворотом. Интерфейс ведет себя так, как вы описали это на iPad под управлением iOS 4.3. Тем не менее, сегментированный элемент управления тускнеет в iPad под управлением iOS 5.0. Итак, я предполагаю, что это ошибка, которая была исправлена ​​Apple в iOS 5.

...