2015-01-17 9 views
5

मेरे पास एक साधारण विभाजन दृश्य स्थापित करने का समय है। पहला विभाजन दृश्य ढह गया है। मुझे इसके लिए न्यूनतम चौड़ाई निर्धारित करने की आवश्यकता है। मैं जो कुछ भी ऑनलाइन देखता हूं (NSSplitViewController/NSSplitView के लिए दुर्लभ) उद्देश्य-सी के लिए है, ऐप प्रतिनिधि में सब कुछ डालता है, और XIB का उपयोग करता है।NSSplitViews की न्यूनतम चौड़ाई निर्धारित करना

यहां परिदृश्य है: स्प्लिट व्यू कंट्रोलर के लिए एक सेग्यू के साथ विंडो कंट्रोलर, जिसमें दो स्प्लिट व्यू (2 व्यू कंट्रोलर) हैं।

किस ऑब्जेक्ट को NSSplitViewDelegate होना आवश्यक है?

संपादित करें: जोड़ना कोड स्निपेट: उदाहरण के लिए, मैं इस है:

import Cocoa 

class ViewController: NSSplitViewController, NSSplitViewDelegate { 


    @IBOutlet weak var pdlSplitView: NSSplitView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     } 
    override func splitView(splitView: NSSplitView, constrainMinCoordinate proposedMinimumPosition: CGFloat, ofSubviewAt dividerIndex: Int) -> CGFloat { 
     return proposedMinimumPosition + 200 
    } 

} 

वहाँ अधिक है कि मैं याद कर रहा हूँ है?

धन्यवाद

अद्यतन

नीचे टिप्पणी के आधार पर, मैं एक परिवर्तन किया है, लेकिन अब मैं AppDelegate के लिए वर्ग परिभाषा पर एक sigAbort मिलता है। Full code

ViewController:

import Cocoa 

class ViewController: NSSplitViewController, NSSplitViewDelegate { 


    @IBOutlet weak var pdlSplitView: NSSplitView! 

    let publicDataListings : PDL = PDL() 


    override func viewDidLoad() { 
     super.viewDidLoad() 

     // Do any additional setup after loading the view. 
     self.pdlSplitView.delegate = self 

    } 

    override func splitView(splitView: NSSplitView, constrainMinCoordinate proposedMinimumPosition: CGFloat, ofSubviewAt dividerIndex: Int) -> CGFloat { 
    return proposedMinimumPosition + 200 
    } 

} 

SidebarViewController:

import Cocoa 

class SidebarViewController: NSViewController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do view setup here. 
    } 


} 

DatasetViewController:

import Cocoa 

class DatasetViewController: NSViewController, NSSplitViewDelegate { 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do view setup here. 
    } 

} 

अद्यतन मैं दूर अपने कस्टम NSSplitViewCont ले लिया रोलर क्लास और दो एनएसएसप्लिट व्यू क्लासेस बनाए, एक बाधा विधि के साथ। अब, मैं दोनों subviews देखते हैं, लेकिन वे काफी छोटी होती होनी चाहिए उससे अधिक कर रहे हैं:

enter image description here

सभी कि स्विफ्ट और स्टोरीबोर्ड उन के साथ इस किया है पर किसी को है?

+0

क्या आप ऑटो लेआउट का उपयोग कर रहे हैं? ओएस के पहले संस्करण क्या है जिस पर आप अपना ऐप चलाने के लिए चाहते हैं? यदि आप 10.8 या बाद में लक्ष्यीकरण कर रहे हैं और ऑटो लेआउट का उपयोग कर रहे हैं, तो विभाजित दृश्य इसके सबव्यूज़ की बाधाओं का सम्मान करेगा। इसलिए, न्यूनतम चौड़ाई अंतर्निहित हो सकती है क्योंकि सबव्यू के भीतर कुछ अंतर्निहित चौड़ाई है और संपीड़न का प्रतिरोध करता है और उप-दृश्य में अग्रणी और पीछे की बाधाओं का सामना करता है। या आप सबव्यू पर स्पष्ट चौड़ाई बाधा उत्पन्न कर सकते हैं कि यह कुछ स्थिर से अधिक या बराबर हो। –

+0

मैं लक्ष्य 10.10+ के साथ ठीक हूँ। मैं स्विफ्ट में ऐसा करने की कोशिश कर रहा हूं। मैंने बाधाओं को लागू करने की कोशिश की है, लेकिन वे छड़ी नहीं करते हैं। मुझे पता है कि यह अब एक मोबाइल दुनिया है, लेकिन बिल्ली, मैं अभी स्विफ्ट में सिर्फ एक स्प्लिट व्यू हैलो वर्ल्ड के लिए भुगतान करूंगा। तो मैं दौड़ के लिए बंद हो जाएगा। –

+0

यदि आप कुछ स्प्लिट व्यू प्रतिनिधि विधियों को लागू करते हैं, तो स्प्लिट व्यू ऑटो लेआउट का उपयोग नहीं करेगा। विनिर्देशों के लिए 10.8 के लिए ऐपकिट रिलीज नोट्स देखें। साथ ही, मुझे यकीन नहीं है कि विभाजन दृश्य प्रतिनिधि विधियां 'NSSplitViewController' के साथ संगत हैं या नहीं। अगर उस प्रतिनिधि विधि को हटाने में मदद नहीं मिलती है, तो सेट अप करने की कोशिश की गई बाधाओं को दिखाएं और आपने यह कैसे किया। –

उत्तर

-2
  1. NSSplitViewController को NSSplitView (विभाजित दृश्य जिसे आप बाधित करना चाहते हैं) के प्रतिनिधि के रूप में सेट करें। आपके मामले में यह होना चाहिए - xib में मालिक दायर करने के लिए NSSplitView के प्रतिनिधि आउटलेट हुक (मुझे लगता है कि फ़ाइल मालिक है NSSplitViewController उपवर्ग)
  2. - (CGFloat)splitView:(NSSplitView *)splitView constrainMinCoordinate:(CGFloat)proposedMin ofSubviewAt:(NSInteger)dividerIndex { ... } 
    

लागू NSSplitViewController

में

https://developer.apple.com/library/mac/documentation/Cocoa/Reference/NSSplitViewDelegate_Protocol/index.html#//apple_ref/occ/intfm/NSSplitViewDelegate/splitView:constrainMinCoordinate:ofSubviewAt:

+0

? क्या हम स्टोरीबोर्ड का उपयोग नहीं कर रहे हैं? यही वह जगह है जहां सब ठीक है। कृपया मेरे पास वर्तमान में कोड के लिए ऊपर दिए गए मेरे संपादन को देखें। –

+0

आपके द्वारा पोस्ट किया गया कोड सही है, बस व्यू कंट्रोलर को उस स्प्लिट व्यू के प्रतिनिधि बनने के लिए सेट करें जिसे आप बाध्य करना चाहते हैं। ViewController में: func view ओवरड्राइड करें() { super.viewDidLoad() splitView.delegate = self; } –

+0

func view ओवरड्राइडडिडलोड() {super.viewDidLoad(); pdlSplitView.delegate = स्वयं; } –

16

NSSplitViewController/NSSplitView के लिए ऑटो लेआउट के साथ स्टोरीबोर्ड में न्यूनतम चौड़ाई निर्धारित करने के लिए कोई कोडिंग आवश्यक नहीं है।

कस्टम व्यू का चयन करें जिसके लिए आपको न्यूनतम चौड़ाई की आवश्यकता है (उदा।200), और आवश्यक मूल्य पर सेट चौड़ाई बाधा जोड़ें जो "समान" बाधा जोड़ देगा (उदा। कस्टम व्यू। विथथ 200 के बराबर)।

अगला नई बाधा का पता लगाएं और "ग्रेटर थान या बराबर" के बाध्यता संबंध को बदलें (उदाहरण के लिए अब आपके पास चौड़ाई ≥ 200 है)।

अब आपके पास NSSplitView में न्यूनतम चौड़ाई है। फिर आप किसी अन्य ऑटो लेआउट बाधाओं के साथ किसी भी विवाद को हल करने के लिए प्राथमिकता फ़ील्ड का उपयोग कर सकते हैं।

+6

धन्यवाद। यह एक पूरा रहस्य था, जब तक आपको पता न हो कि यह वहां है! :-) यह स्क्रीनशॉट को शामिल करने के आपके उत्तर में मदद कर सकता है। – RichS

+0

धन्यवाद, मैं इसके साथ संघर्ष कर रहा था। बाधाओं के लिए> = और <= सेटिंग्स को ढूंढना कठिन होता है यदि आप नहीं जानते कि वे मौजूद हैं। –

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