2012-03-23 12 views
6

हमारे पास माता-पिता Split व्यू (NSSplitView), और दो सबव्यू, Content और SideBar (साइडबार दाईं ओर है) है।NSSplitView subView + दृश्य फलक स्प्लिटर विभक्त की दृश्यता को टॉगल कैसे करें?

SideBar देखने के लिए इष्टतम कोको-अनुकूल तरीका क्या होगा?

  • मैं वास्तव में, यह प्यार होता है, तो सुझाव दिया समाधान एनीमेशन
  • मैं वास्तव में बाहरी प्लगइन्स से संबंधित किसी भी सुझाव की जरूरत नहीं है, आदि (जैसे BWToolkit)

संकेत शामिल हैं: मैं ऐसा करने की कोशिश कर रहा है, लेकिन फिर भी मुझे NSSplitView के विभाजक को छिपाने में समस्याएं थीं। मैं इसे कैसे कर सकता हूं, जबकि इसे एक ही समय में छुपा रहा हूं?

उत्तर

6

यहां एक सुंदर सभ्य ट्यूटोरियल है जो दिखाता है कि यह कैसे करें: Unraveling the Mysteries of NSSplitView

विभाजक छुपाएं एनएसएसप्लिट व्यू के प्रतिनिधि विधि splitView:shouldHideDividerAtIndex: में किया जाता है।

यदि आप NSSplitView के तरीके को पसंद नहीं करते हैं तो आपको फ्रेम आकार को स्वयं एनिमेट करना होगा।

+0

धन्यवाद, नाथन! ऐसा लगता है कि यह समझ में आता है ... –

3

मैंने @ नाथन के उत्तर से लिंक में सामग्री का एक स्विफ्ट संस्करण लिखा जो मेरे लिए काम करता है। मेरे उदाहरण के संदर्भ में 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() 
} 

इन कार्यों शायद एक कक्षा में तरीकों, वे मेरे लिए कर रहे हैं होगा। यदि आपका splitViewnil हो सकता है तो आपको स्पष्ट रूप से इसकी जांच करनी होगी। यह भी मानता है कि आपके पास दो सबव्यूव हैं और एक इंडेक्स 1 पर है, यहां sidePanel है जिसे आप पतन करना चाहते हैं।

2

मुझे ऊपर दिए गए कोड के साथ कुछ कलाकृतियां मिलीं, संभवतः क्योंकि यह संदर्भ से बाहर थी। मुझे यकीन है कि यह काम करता है जहां इसका मतलब था। वैसे भी, यहाँ एक बहुत ही सुव्यवस्थित कार्यान्वयन है:

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

एनिमेशन का उपयोग कर एक अच्छा उदाहरण देखने के लिए, this file डाउनलोड करने के लिए नियंत्रण-क्लिक करें।

2

स्टोरीबोर्ड के साथ एक्सकोड 9.0 में खुला स्क्रीन दृश्य दृश्य-> मेनू-> साइडबार दिखाएं। सीटीआरएल-क्लिक साइडबार पर क्लिक करें, भेजे गए कार्यों में दिए गए एक को हटाएं, एक्स पर क्लिक करें। सर्कल से CTRL ड्रैग को एप्लिकेशन दृश्य में पहली प्रतिक्रिया दें और कनेक्ट करने के लिए टॉगलसाइडबार का चयन करें। स्टोरीबोर्ड खोलें और पहले स्प्लिट व्यू आइटम का चयन करें और डिस्प्ले इंस्पेक्टर चेंज व्यवहार डिफ़ॉल्ट से साइडबार में चुनें। चलाएं और दृश्य मेनू आइटम शो/छुपाएं के साथ प्रयास करें। इंटरफ़ेस बिल्डर में कोई कोड नहीं किया गया कोड। टॉगलसाइडबार पहली विभाजित दृश्य वस्तु को संभालता है। https://github.com/Dis3buted/SplitViewController

+0

महान उदाहरण, धन्यवाद! –

संबंधित मुद्दे