如何正确设置NSSegmentedControl启用

时间:2010-11-12 23:16:23

标签: objective-c cocoa cocoa-bindings nsuserdefaults nssegmentedcontrol

我希望我的NSSegmentedControl在启用时选择了一个片段,并且在禁用时没有选择片段(iTunes中的视图NSSegmentedControl具有的行为类型)。

这里有一些图片:

imagebam.com http://thumbnails34.imagebam.com/10640/95598d106393309.jpg已启用并已选中

imagebam.com http://thumbnails27.imagebam.com/10640/fa9e3c106393310.jpg已正确停用

imagebam.com http://thumbnails22.imagebam.com/10640/239a02106393312.jpg已停用但未正确

(*)我认识到每当BOOL属性改变时我都可以编写一个函数来调用,在这个函数中我可以设置所有被删除的段或者选择合适的段,但是我想知道是否有办法通过Cocoa Bindings或Interface Builder实现这一目标。

更新:添加了一些问题图片

2 个答案:

答案 0 :(得分:0)

编辑:我对此并不完全确定,但我认为“没有选择占位符”是你最好的选择。 http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/CocoaBindingsRef/Concepts/BindingsOptions.html%23//apple_ref/doc/uid/20002304-187525

我仍然认为,当你有条件地禁用控件时,你必须以编程方式指定没有选择。

答案 1 :(得分:0)

程序化解决方案可以是这样的:

- (void)setSegmentEnabled:(BOOL)enabled{
     if (enabled)
     {
         int vState = [[NSUserDefaults standardUserDefaults] integerForKey:@"SelectedSegmentView"];
         [viewSegment setSelectedSegment:vState];
         segmentEnabled = YES;        
     }
     else
     {
         [viewSegment setSelected:NO forSegment:0];
         [viewSegment setSelected:NO forSegment:1];
         [viewSegment setSelected:NO forSegment:2];
         segmentEnabled = NO;
     }
}

我只是为BOOL属性segmentEnabled实现自己的setter,它与viewSegment

绑定