3

ここで、アプリの実行時に条件で仕切りを非表示または表示したいと考えています。このデリゲートメソッドを使用しました:

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

しかし、うまくいきませんでした。なぜですか?この方法をどのように使用しますか?どうもありがとうございました!

4

5 に答える 5

5

分割ビューはそのメッセージをデリゲートに送信し、その仕切りを非表示にするかどうかをデリゲートに尋ねます。それでは、代理人になって、分割ビューの質問に答えてください。

ドキュメントを確認してください。そのメッセージは、あなたが望むものを達成しない可能性があります。ドキュメントには、そのメッセージに応答することでできるすべてのことがリストされています。

于 2009-12-24T11:17:25.903 に答える
2

サブクラス化を伴わない 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 のみを返します。2 番目のメソッドでも同じことを行い、YES のみを返します。

于 2016-02-29T16:32:34.233 に答える
1

後世のために、Swift を使用してデリゲート関数splitView(_:effectiveRect:forDrawnRect:ofDividerAtIndex:)を呼び出し、空の NSRect を返すようにすることができます。

override func splitView(_ splitView: NSSplitView, effectiveRect proposedEffectiveRect: NSRect, forDrawnRect drawnRect: NSRect, ofDividerAt dividerIndex: Int) -> NSRect {

    if dividerIndex == 1 {
        return NSRect()
    }
    return super.splitView(splitView, effectiveRect: proposedEffectiveRect, forDrawnRect: drawnRect, ofDividerAt: dividerIndex)
}
于 2015-11-06T16:57:05.010 に答える