2009-12-24 2 views
3

이제 앱을 실행할 때 구분선을 숨기거나 표시하고 싶습니다. 이 대리자 메서드를 사용했습니다 :nssplitview의 분할자를 숨기는 방법은 무엇입니까?

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

그러나 작동하지 않았습니까? 이 방법을 사용하는 방법? 고마워요!

+3

splitView : shouldHideDividorAtIndex : does not collapsed 뷰의 분할자를 숨기지 않습니다. – carmin

답변

4

분할보기는 해당 메시지를 대리인에게 보내어 대리인에게 해당 구분선을 숨겨야하는지 여부를 묻습니다. 따라서 be the delegate을 입력하고 분할보기의 질문에 답하십시오.

the documentation을 꼭 확인하십시오. 그 메시지가 당신이 원하는 것을 성취하지 못할 수도 있습니다. 문서에는 해당 메시지에 응답하여 수행 할 수있는 모든 것이 나열되어 있습니다.

+1

클래스의 대리자를 설정했지만 여전히 작동하지 않습니까? – jin

+0

분할 뷰의 델리게이트를 클래스의 인스턴스로 설정해야하며 해당 인스턴스가 올바른 값으로 적절한 메시지 (링크 된 문서 참조)에 응답해야합니다. –

3

NSSplitView-dividerThickness를 오버로드하고 0을 반환하여 모든 분배기를 숨길 수 있습니다. NSSplitView-drawDividerInRect에 과부하를 걸면 : 분배기를 개별적으로 제어 할 수 있습니다 (수퍼바이저가 구분선을 그릴 수 있도록 선택 함). 이러한 선택은 하위보기가 표시되는 경우에도 작동합니다. effectiveRect : forDrawnRect : ofDividerAtIndex : @의 카민의 노트에 추가

6

은, 위의 NSSplitView dividerThickness 속성을 무시하면 splitView에서 NSRectZero를 반환, 특히 저 (위해 일한 유일한 일 - as detailed here - NSSplitView의 대리자 메서드 작동하지 않았다 뷰 자체에서 분리 된 부동 디바이더가 발생했습니다. effectiveRect : forDrawnRect : 당신이 위임 기능 splitView (_ 호출 할 수 있습니다 빠른 2 일,

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

Objective-C에서이 작업을 수행하는 방법은 무엇입니까? 감사. –

+0

이 위대한 일했습니다! 감사. –

+0

목표 -C : - (CGFloat) dividerThickness {return 0.0f; } – uem

0

후손을 위해서 : 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 만 반환하십시오.

관련 문제