2009-12-24 77 views
3

现在我想在应用程序运行时隐藏或显示我的状况分隔线。使用这种代表方法:如何隐藏nssplitview的分隔线?

- (BOOL)splitView:(NSSplitView *)splitView shouldHideDividerAtIndex:(NSInteger)dividerIndex 
{ 
    if (A) 
     return YES; 
    else 
     return NO; 
} 

但它没有工作,为什么?如何使用这种方法?非常感谢你!

+3

splitView:shouldHideDividorAtIndex:不隐藏未折叠的视图的分隔线。 – carmin 2013-11-03 01:05:32

回答

4

拆分视图将该消息发送给其委托,要求委托人是否应隐藏该拆分器。那么,be the delegate,并回答拆分视图的问题。

请务必查看the documentation。该消息可能无法完成您想要的内容。该文档列出了您通过回复该消息所能做的所有事情。

+1

我已经设置了我班的代表,但仍然无法工作? – jin 2010-01-21 09:03:33

+0

您需要将分割视图的委托设置为您的类的实例,并且该实例需要以正确的值响应相应的消息(请参阅链接到的文档)。 – 2010-01-21 21:56:28

3

您可以重载NSSplitView-dividerThickness并返回0以隐藏所有分隔符。您可以重载NSSplitView-drawDividerInRect:对分隔符进行单独控制(选择允许super绘制分隔符)。即使子视图可见,这些选择也可以工作。

6

继@ CARMIN的笔记,上面覆盖的NSSplitView dividerThickness属性是只为我(工作具体而言,从SPLITVIEW返回NSRectZero的事情:effectiveRect:forDrawnRect:ofDividerAtIndex:NSSplitView委托方法 - as detailed here - 没有工作并导致浮动分隔符与视图本身脱节)。

下面是斯威夫特代码:

override var dividerThickness:CGFloat 
{ 
    get { return 0.0 } 
} 
+1

如何在Objective-C中做到这一点?谢谢。 – 2015-07-07 13:30:46

+0

这工作很好!谢谢。 – 2015-10-11 01:17:54

+0

Objective-C: - (CGFloat)dividerThickness {return 0.0f; } – uem 2017-02-17 10:39:29

0

为子孙后代着想,与SWIFT 2个工作,你可以调用委托函数SPLITVIEW(_:effectiveRect:forDrawnRect:ofDividerAtIndex :),只是有它返回一个空NSRect

func splitView(splitView: NSSplitView, effectiveRect proposedEffectiveRect: NSRect, forDrawnRect drawnRect: NSRect, ofDividerAtIndex dividerIndex: Int) -> NSRect { 
    return NSRect.init() 
} 
1

以下是如何在Obj-C中做到这一点,不涉及子类。确保您已连接IB中的SplitView委托。

然后在您的委托类:

-(NSRect)splitView:(NSSplitView *)splitView effectiveRect:(NSRect)proposedEffectiveRect forDrawnRect:(NSRect)drawnRect ofDividerAtIndex:(NSInteger)dividerIndex 
{ 

    if ([_splitView subviews][1].isHidden ==YES || [[_splitView subviews][1] frame].size.height < 50) //closed or almost closed 
    { 

    return NSZeroRect; 

    } 

    return proposedEffectiveRect; 

} 



- (BOOL)splitView:(NSSplitView *)splitView shouldHideDividerAtIndex:(NSInteger)dividerIndex 
{ 

    if ([_splitView subviews][1].isHidden ==YES || [[_splitView subviews][1] frame].size.height < 50) 
    { 

    return YES; 
    } 

    return NO; 
} 

这将隐藏在拆分视图被关闭的分隔,但显示它时,它是开放的。

如果你不希望他们能够拖动它,即使它被打开,只需剪掉第一个方法中的所有代码,并只返回NSZeroRect。在第二种方法中做同样的事情,只返回YES。

相关问题