NSSegmentedControl -selectedSegment всегда возвращает 0 - PullRequest
0 голосов
/ 17 мая 2010

У меня есть NSSegmentedControl с двумя сегментами, установленными в режим «Выбрать None» в Интерфейсном Разработчике. Независимо от того, что я пытаюсь, я не могу получить -selectedSegment, чтобы вернуть что-либо, кроме 0, даже если сегмент 0 даже отключен по умолчанию и не может быть выбран. Вот соответствующая функция, которая вызывается при нажатии любого сегмента в элементе управления:

-(IBAction)changeStep:(id)sender
{
    [stepContainer setHidden:TRUE];
    [(NSView *)[[wizard stepArray] objectAtIndex:(NSInteger)[wizard step]] removeFromSuperview];
    switch ([[navigationButton cell] selectedSegment])
    {
    case 0:
        [wizard setStep:(NSInteger *)[wizard step]-1];
        break;
    case 1:
        [wizard setStep:(NSInteger *)[wizard step]+1];
        break;
    default:
        break;
    }
    //[[navigationButton cell] setSelected:FALSE forSegment:[navigationButton selectedSegment]];

    if ([wizard step] > 0)
    {
        [wizard setStep:0];
        [navigationButton setEnabled:FALSE forSegment:0];
    }

    NSLog(@"%d", [wizard step]);
    [stepContainer addSubview:(NSView *)[[wizard stepArray] objectAtIndex:(NSInteger)[wizard step]]];
    [stepContainer setHidden:FALSE withFade:TRUE];
}

Я также пытался использовать -isSelectedForSegment, но у него тот же результат.
Любая помощь, которую вы можете оказать, была бы потрясающей, я понятия не имею, что я делаю неправильно. Спасибо!
SphereCat1

РЕДАКТИРОВАТЬ: Это момент лицевой стороны лица, см. Мой ответ ниже.

Ответы [ 3 ]

1 голос
/ 17 мая 2010

Хорошо, это момент лицевой стороны лица. Выяснилось, что я ошибался, и в моей логике увеличения / уменьшения шага просто ошибка.

все лучше! :)

Facepalm
SphereCat1

1 голос
/ 17 мая 2010

Вы, кажется, делаете много каста в местах, которые вам не нужны.

[(NSView *)[[wizard stepArray] objectAtIndex:(NSInteger)[wizard step]] removeFromSuperview];

Что возвращает [wizard step]? Вам не нужно его разыгрывать.

    [wizard setStep:(NSInteger *)[wizard step]-1];

Это еще более противоречиво. NSInteger * - это тип указателя (NSInteger не является объектом). Если [wizard setStep:] принимает NSInteger *, то, вероятно, это связано с тем, что он используется в качестве параметра inout, возможно, чтобы предоставить вам новый шаг, если он отличается от запрошенного. В этом случае вам нужно сделать что-то вроде этого:

NSInteger newStep = [wizard step] - 1;
[wizard setStep: &newStep];
0 голосов
/ 17 мая 2010

Вы уверены, что navigationButton инициализирован? Поставьте NSLog утверждение, подобное этому:

NSLog (@"%@", navigationButton);

Если вы отправите объект nil, в результате вы получите 0. Если navigationButton является IBOutlet, вам необходимо убедиться, что он правильно подключен в Интерфейсном Разработчике.

...