2012-03-23 17 views
6

Bir üst Split görünümü (NSSplitView) ve iki alt görü, Content ve SideBar (kenar çubuğu sağda).NSSplitView altView + görünebilirlik nasıl görünür bölme Pane Splitter bölücü?

SideBar görünümünü değiştirmek için en uygun Kakao dostu yol ne olurdu?

  • önerilen çözüm animasyonu
  • Gerçekten harici eklentiler ile ilgili herhangi bir öneri gerekmez, vb (örneğin BWToolkit)

İPUCU içeriyorsa Gerçekten isterim: I Bunu yapmaya çalışıyorum, ancak yine de NSSplitView'ın bölücüsünü gizleme sorunlarım vardı. Bunu aynı zamanda saklarken nasıl yapabilirim?

cevap

6

İşte bunun nasıl yapılacağını gösteren oldukça iyi bir öğretici: Unraveling the Mysteries of NSSplitView.

Ayırıcıyı gizlemek, NSSplitView'ın delege yöntemiyle splitView:shouldHideDividerAtIndex: yapılır.

NSSplitView'ın yaptığı gibi beğenmediğinizde, çerçeve boyutu değişikliğini kendiniz yapmanız gerekir.

+0

Teşekkürler, Nathan! Bu mantıklı görünüyor ... –

3

@ Nathan'ın yanıtının benim için çalıştığı bağlantıdaki içeriğin bir Swift sürümünü yazdım. Benim örnek bağlamında splitView muhtemelen sağlanan geniş kapsamlı bir sınıfın bir örneği özelliği olarak, başka bir yerde ayarlanır: bir sınıfta muhtemelen yöntemleri, onlar benim için

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() 
} 

Bu işlevler şunlardır edecektir. splitView'unuz nil olabilir, bunun için mutlaka kontrol etmeniz gerekir. Bu ayrıca iki alt görüntünüz olduğunu ve 1'inci sırada yer aldığını varsayar, burada sidePanel daraltmak istediğinizdir.

2

Yukarıdaki kodla ilgili bazı eserlerim var, muhtemelen bağlam dışı olduğu için. Emin olduğu yerde çalıştığından eminim. Neyse, burada çok aerodinamik uygulamasıdır:

// 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 
    } 
} 

animasyonlar kullanarak iyi bir örnek görmek için this file indirmek için kontrol tıklayın.

2

Xcode 9.0'da Storyboard'lar açıkken Uygulama Sahne görünümü Görünüm-> Menü-> Kenar çubuğunu göster'i seçin. CTRL-Göster Kenar Çubuğunu Göster, gönderilen eylemlerde bulunanı siler, x'e tıklayın. Çemberden CTRL uygulama sahnesinde İlk Yanıtlayıcı'ya sürükleyin ve bağlanmak için toggleSideBar'ı seçin. Hikaye panosunu açın ve ilk bölünmüş görünüm öğesini ve özellik denetçisi değişiklik davranışını varsayılandan kenar çubuğuna seçin. Çalıştır ve menü öğesi göster/gizle ile dene. Hepsi arayüz oluşturucusunda kod yok. toggleSideBar, ilk bölünmüş görüntüleme öğesini ele alır. https://github.com/Dis3buted/SplitViewController

+0

Mükemmel örnek, teşekkürler! –

İlgili konular