当前位置:  开发笔记 > IOS > 正文

如何以编程方式展开和折叠部分NSSplitView?

如何解决《如何以编程方式展开和折叠部分NSSplitView?》经验,为你挑选了3个好方法。

我想,以取代RBSplitViewNSSplitView我现有的项目.该应用程序现在只有豹子,我想用Leopard附带RBSplitView新产品 替换NSSplitView.

不过,我错过RBSplitView的便利方法expandcollapseNSSplitView.如何以编程方式展开和折叠部分NSSplitView?



1> Andreas Järl..:

只需隐藏您想要折叠的子视图,例如

[aSubViewToCollapse setHidden:YES];

您可能还希望实现委托方法 - (BOOL)splitView:shouldHideDividerAtIndex:返回YES以在折叠时隐藏分隔符.


+1这应该是实际按预期工作的答案.` - [NSSplitView isSubviewCollapsed:]`如果子视图被隐藏,则返回`YES`.
无论如何你需要调用` - [NSSplitView adjustSubviews]`来设置隐藏后立即更新图形.

2> hasseg..:

我刚刚进行了程序化扩展和崩溃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
         ];
}


方法`setPosition:ofDividerAtIndex:`不会将子视图缩小为零大小.在上面的代码中,作者将新位置设置为固定值(`lastSplitViewSubViewLeftWidth`),但是可以使用`setPosition:NSMaxX(subview.frame)ofDividerAtIndex:0`恢复预折叠值.请注意,由于子视图保留其原始宽度,因此不需要通知来存储它.另请参阅:http://cocoadev.com/wiki/NSSplitView
这实际上并没有"崩溃"子视图.它只是将它缩小到0.这是一个问题,因为`-isSubviewCollapsed:`仍然总是返回`NO`,如果你的子视图的界面有任何自动调整蒙版应用,它们就会搞砸了.请参阅下面的解决方案,其中涉及使用`-setHidden:`来获得正确的答案.

3> Milliways..:

我尝试了上面的解决方案,发现它不起作用,因为isSubviewCollapsed从未返回YES

这些建议的组合产生了有效的结果

if ([splitViewTop isHidden]) {
    [splitViewTop setHidden:NO];
    [split
     setPosition:previousSplitViewHeight
     ofDividerAtIndex:0];
}
else {
    [splitViewTop setHidden:YES];
}
[split adjustSubviews];


这里的混乱似乎围绕着"崩溃"的定义.折叠视图是否意味着将其大小设置为0或隐藏它.NSSplitViewDelegate Protocol在splitView中给出了这个定义:canCollapseSubview:"折叠的子视图被隐藏但被拆分视图对象保留,其大小与折叠前相同." 所以,@ jemmons和Milliways似乎就在它的右边.
推荐阅读
mobiledu2402851173
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有