0

我有一个 NSSegmentedControl,其中两个段在 Interface Builder 中设置为“选择无”模式。无论我尝试什么,我都无法让 -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,但结果相同。
你能提供的任何帮助都会很棒,我不知道我做错了什么。谢谢!
球猫1

编辑:这是一个面对面的时刻,请参阅下面的答案。

4

3 回答 3

1

好吧,这是一个面对面的时刻。原来我是 NSLogging 错误的事情,而且我的步进增量/减量逻辑中只有一个错误。

一切都好!:)

facepalm
SphereCat1

于 2010-05-17T01:08:31.233 回答
1

您似乎在不需要的地方进行了很多铸造。

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

返回什么[wizard step]?您不需要投射它。

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

这更不一致。 NSInteger *是指针类型(NSInteger不是对象)。如果[wizard setStep:]需要 a NSInteger *,那么可能是因为它被用作 inout 参数,如果它与请求的步骤不同,可能会为您提供新步骤。在这种情况下,您需要执行以下操作:

NSInteger newStep = [wizard step] - 1;
[wizard setStep: &newStep];
于 2010-05-17T01:09:06.737 回答
0

你确定navigationButton已经初始化了吗?NSLog发表这样的声明:

NSLog (@"%@", navigationButton);

如果您向nil对象发送消息,您将得到0结果。如果navigationButton是,IBOutlet您需要确保它在 Interface Builder 中正确链接。

于 2010-05-17T00:53:19.093 回答