8

Splitビュー ( )とNSSplitView2 つのサブビュー(右側にサイドバーがあります) があります。ContentSideBar

SideBarビューを切り替える最適な Cocoa フレンドリーな方法は何でしょうか?

  • 提案されたソリューションにアニメーションが含まれている場合、私はそれを本当に気に入っています
  • 外部プラグインなど(BWToolkitなど)に関する提案は本当に必要ありません

ヒント :私はそれをやろうとしましたが、それでも NSSplitView の仕切りを隠すのに問題がありました。同時に非表示にしながら、どうすればそれを行うことができますか?

4

6 に答える 6

7

これを行う方法を示すかなりまともなチュートリアルがあります: Unraveling the Mysteries of NSSplitView .

仕切りの非表示は、NSSplitView のデリゲート メソッドsplitView:shouldHideDividerAtIndex:で行われます。

NSSplitView のやり方が気に入らない場合は、自分でフレーム サイズの変更をアニメーション化する必要があります。

于 2012-03-23T18:22:17.077 に答える
4

@Nathanの回答からのリンクに、コンテンツのSwiftバージョンを書きました。私の例のコンテキストではsplitView、おそらく包含クラスのインスタンス プロパティとして、別の場所に設定されています。

func toggleSidebar () {
    if splitView.isSubviewCollapsed(splitView.subviews[1] as NSView) {
        openSidebar()
    } else {
        closeSidebar()
    }
}

func closeSidebar () {
    let mainView = splitView.subviews[0] as NSView
    let sidepanel = splitView.subviews[1] as NSView
    sidepanel.hidden = true
    let viewFrame = splitView.frame
    mainView.frame.size = NSMakeSize(viewFrame.size.width, viewFrame.size.height)
    splitView.display()
}

func openSidebar () {
    let sidepanel = splitView.subviews[1] as NSView
    sidepanel.hidden = false
    let viewFrame = splitView.frame
    sidepanel.frame.size = NSMakeSize(viewFrame.size.width, 200)
    splitView.display()
}

これらの関数はおそらくクラスのメソッドであり、私にとってはそうです。splitViewできる場合は、nil明らかにそれを確認する必要があります。これは、2 つのサブビューとインデックス 1 のサブビューがあることも前提としています。ここでsidePanelは、折りたたみたいサブビューです。

于 2015-01-21T20:53:25.850 に答える
3

おそらく文脈から外れていたため、上記のコードでいくつかの成果物が得られました。意図された場所で機能すると確信しています。とにかく、これは非常に合理化された実装です。

// this is the declaration of a left vertical subview of
// 'splitViewController', which is the name of the split view's outlet

var leftView: NSView {
    return self.splitViewController.subviews[0] as NSView
    }

// here is the action of a button that toggles the left vertical subview
// the left subview is always restored to 100 pixels here

@IBAction func someButton(sender: AnyObject) {

    if splitViewController.isSubviewCollapsed(leftView) {
        splitViewController.setPosition(100, ofDividerAtIndex: 0)
        leftView.hidden = false
    } else {
        splitViewController.setPosition(0, ofDividerAtIndex: 0)
        leftView.hidden = true
    }
}

アニメーションを使用した良い例を見るには、Ctrl キーを押しながらクリックしてこのファイルをダウンロードしてください。

于 2016-05-06T03:57:10.910 に答える