在我现有的项目中,我想用NSSplitView
替换RBSplitView
。这个应用程序现在只支持Leopard,我想用leopard附带的新NSSplitView
替换RBSplitView
。
然而,我错过了RBSplitView
在NSSplitView
中方便的方法expand
和collapse
,如何以编程方式展开和折叠NSSplitView的某些部分?
发布于 2009-07-09 11:13:00
我刚刚实现了NSSplitView
的程序化扩展和折叠。我还将我的NSSplitView
配置为在双击分隔线时展开/折叠一个子视图,所以我希望它能很好地配合该功能(看起来确实如此)。这是我所做的:
(在本例中,splitView
是NSSplitView
本身,splitViewSubViewLeft
是我希望展开/折叠的子视图,lastSplitViewSubViewLeftWidth
是CGFloat
类型的实例变量。)
// subscribe to splitView's notification of subviews resizing
// (I do this in -(void)awakeFromNib)
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(mainSplitViewWillResizeSubviewsHandler:)
name:NSSplitViewWillResizeSubviewsNotification
object:splitView
];
// this is the handler the above snippet refers to
- (void) mainSplitViewWillResizeSubviewsHandler:(id)object
{
lastSplitViewSubViewLeftWidth = [splitViewSubViewLeft frame].size.width;
}
// wire this to the UI control you wish to use to toggle the
// expanded/collapsed state of splitViewSubViewLeft
- (IBAction) toggleLeftSubView:(id)sender
{
[splitView adjustSubviews];
if ([splitView isSubviewCollapsed:splitViewSubViewLeft])
[splitView
setPosition:lastSplitViewSubViewLeftWidth
ofDividerAtIndex:0
];
else
[splitView
setPosition:[splitView minPossiblePositionOfDividerAtIndex:0]
ofDividerAtIndex:0
];
}
发布于 2010-04-28 17:29:37
只需隐藏您想要折叠的子视图,例如
[aSubViewToCollapse setHidden:YES];
您可能还想实现委托方法-(BOOL)splitView:shouldHideDividerAtIndex:返回YES,以便在折叠时隐藏分隔符。
发布于 2011-07-11 13:18:20
我尝试了上面的解决方案,发现它不起作用,因为isSubviewCollapsed从未返回YES
这些建议的组合产生了一个有效的结果
if ([splitViewTop isHidden]) {
[splitViewTop setHidden:NO];
[split
setPosition:previousSplitViewHeight
ofDividerAtIndex:0];
}
else {
[splitViewTop setHidden:YES];
}
[split adjustSubviews];
https://stackoverflow.com/questions/925020
复制相似问题