现在我想在应用程序运行时隐藏或显示我的状况分隔线。使用这种代表方法:如何隐藏nssplitview的分隔线?
- (BOOL)splitView:(NSSplitView *)splitView shouldHideDividerAtIndex:(NSInteger)dividerIndex
{
if (A)
return YES;
else
return NO;
}
但它没有工作,为什么?如何使用这种方法?非常感谢你!
现在我想在应用程序运行时隐藏或显示我的状况分隔线。使用这种代表方法:如何隐藏nssplitview的分隔线?
- (BOOL)splitView:(NSSplitView *)splitView shouldHideDividerAtIndex:(NSInteger)dividerIndex
{
if (A)
return YES;
else
return NO;
}
但它没有工作,为什么?如何使用这种方法?非常感谢你!
拆分视图将该消息发送给其委托,要求委托人是否应隐藏该拆分器。那么,be the delegate,并回答拆分视图的问题。
请务必查看the documentation。该消息可能无法完成您想要的内容。该文档列出了您通过回复该消息所能做的所有事情。
我已经设置了我班的代表,但仍然无法工作? – jin 2010-01-21 09:03:33
您需要将分割视图的委托设置为您的类的实例,并且该实例需要以正确的值响应相应的消息(请参阅链接到的文档)。 – 2010-01-21 21:56:28
您可以重载NSSplitView-dividerThickness并返回0以隐藏所有分隔符。您可以重载NSSplitView-drawDividerInRect:对分隔符进行单独控制(选择允许super绘制分隔符)。即使子视图可见,这些选择也可以工作。
继@ CARMIN的笔记,上面覆盖的NSSplitView dividerThickness
属性是只为我(工作具体而言,从SPLITVIEW返回NSRectZero的事情:effectiveRect:forDrawnRect:ofDividerAtIndex:NSSplitView委托方法 - as detailed here - 没有工作并导致浮动分隔符与视图本身脱节)。
下面是斯威夫特代码:
override var dividerThickness:CGFloat
{
get { return 0.0 }
}
如何在Objective-C中做到这一点?谢谢。 – 2015-07-07 13:30:46
这工作很好!谢谢。 – 2015-10-11 01:17:54
Objective-C: - (CGFloat)dividerThickness {return 0.0f; } – uem 2017-02-17 10:39:29
为子孙后代着想,与SWIFT 2个工作,你可以调用委托函数SPLITVIEW(_:effectiveRect:forDrawnRect:ofDividerAtIndex :),只是有它返回一个空NSRect
func splitView(splitView: NSSplitView, effectiveRect proposedEffectiveRect: NSRect, forDrawnRect drawnRect: NSRect, ofDividerAtIndex dividerIndex: Int) -> NSRect {
return NSRect.init()
}
以下是如何在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。
splitView:shouldHideDividorAtIndex:不隐藏未折叠的视图的分隔线。 – carmin 2013-11-03 01:05:32