2009-12-24 78 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。

相關問題