UISegmentedControl: программно установить индекс? - PullRequest
1 голос
/ 28 июня 2011

Я пытаюсь загрузить пользовательские настройки в сегментированный элемент управления. NSUserDefault читает правильно, и предпочтение правильно переводится в индекс. Однако сегментированный элемент управления, похоже, не реагирует на установку индекса, предпочитая оставаться с индексом 0.

Код clean компилируется с -Wall -Wextra, а clang не сообщает о каких-либо проблемах. Я также бегал с утечками и зомби - хорошо. И ASSERTs ниже не стреляют.

UISegmentedControl был создан с использованием Interface Builder (всего их 4). Я проверил соединения. Я попытался позвонить -loadPreferences в -viewDidLoad, -viewWillAppear и -viewDidAppear.

Есть какие-то уловки, которые я пропускаю? Должен ли я вызывать needsUpdate или какой-либо другой метод, чтобы заставить элементы управления перерисовываться?

Jeff

-(void)loadPreferences
{
   NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
   ...

    int days = [userDefaults integerForKey:kDirtyAfter];
    ASSERT(IsValidDirtyDays((DirtyDays)days));
    if(!IsValidDirtyDays((DirtyDays)days))
        days = (int)DirtyDaysDefault;

    int idx;
    switch(days)
    {
        case DirtyDays1: idx = 0; break;
        case DirtyDays3: idx = 1; break;
        case DirtyDays7: idx = 2; break;
        case DirtyDays14: idx = 3; break;
        case DirtyDays28: idx = 4; break;
        default: idx = 1;
    }

    // dirtyAfterSegment.selectedSegmentIndex = idx;
    [dirtyAfterSegment setSelectedSegmentIndex:idx];
    ASSERT(dirtyAfterSegment.selectedSegmentIndex == idx);
}

Ответы [ 2 ]

1 голос
/ 28 июня 2011

Если Assert не запускается, значит что-то должно изменить индекс на 0 после этого кода, или сам код всегда использует первый оператор case.

Создать действие для valueChanged для сегмента,и установите точку останова в этом действии, чтобы увидеть, когда сегмент изменяется и кто его меняет.

0 голосов
/ 28 июня 2011

Вы сказали, что создали сегментированные элементы управления в конструкторе интерфейсов, создали ли вы IBOutlets для них и также подключили их?

...