NSSegmentedControl -selectedSegment всегда возвращает 0
У меня есть NSSegmentedControl с двумя сегментами, установленными в режим "Выберите Нет" в Интерфейсном Разработчике. Независимо от того, что я пытаюсь, я не могу получить -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
РЕДАКТИРОВАТЬ: Это момент facepalm, см. Мой ответ ниже.
3 ответа
Хорошо, это момент лицевой стороны лица. Выяснилось, что я ошибался, и в моей логике увеличения / уменьшения шага была просто ошибка.
Все лучше!:)
Facepalm
SphereCat1
Вы, кажется, делаете много кастинга в местах, которые вам не нужны.
[(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];
Вы уверены, что navigationButton
инициализируется? Положить NSLog
утверждение как это:
NSLog (@"%@", navigationButton);
Если вы сообщение nil
объект, вы получите 0
в следствии. Если navigationButton
является IBOutlet
Вы должны убедиться, что он правильно подключен в Интерфейсном Разработчике.