2014-07-11 9 views
10

के साथ ओपन गैर-मोडल विंडो मैं स्टोरीबोर्ड सेग्यू (ओएसएक्स) के माध्यम से NSViewController दिखाने का प्रयास करता हूं। उद्घाटन खिड़की एक इंस्पेक्टर खिड़की होगी, इसलिए यह गैर-मोडल होना चाहिए।ओएसएक्स स्टोरीबोर्ड - मानक सेग्यू

जब मैं ट्रिगर बटन से खिड़की नियंत्रक मैं निम्नलिखित segue शैली विकल्प की पेशकश की कर रहा हूँ के लिए Ctrl-खींच कर एक कार्रवाई segue बनाएँ:

  • मोडल
  • शीट
  • पॉपओवर
  • कस्टम

पहले तीन विकल्प स्पष्ट रूप से उपयुक्त नहीं हैं।

मुझे यकीन है कि मैं दृश्य दिखाने के लिए एक कस्टम सेगू बना सकता हूं। इसमें एक वर्ग बनाने, कुछ तरीकों को लागू करने आदि शामिल होंगे।

हालांकि, मेरी आवश्यकता मेरे लिए काफी बुनियादी लगती है, मुझे आश्चर्य है कि मुझे कुछ याद आ रहा है, कैनवास के माध्यम से एक गैर-मोडल विंडो खोलने का एक आसान तरीका।

मैं एक्सकोड 6-बीटा 3 का उपयोग कर रहा हूं।

+0

क्या खट्टा दृश्य (नियंत्रक) नेविगेशन बार है? – Drux

+0

मुख्य विंडो में नेविगेशन बार है (ट्रिगर बटन वास्तव में टूलबार के अंदर है)। दृश्य नियंत्रक जिसे मैं खोलने की कोशिश कर रहा हूं वह नहीं है। – mic

+0

हम्म .. उस स्थिति में यदि आप आईबी में पहले से दूसरे दृश्य में ctrl-drag (और Xcode 5.1.1 कहते हैं), तो क्या आपको "पुश" विकल्प भी नहीं मिलता है? (मुझे लगता है कि यह आपका "मानक segue" है।) – Drux

उत्तर

13

कम से कम अभी (बीटा 3), एक गैर-मोडल व्यू की अपनी खिड़की की आवश्यकता होती है, और इसके लिए एक सीगू बनाने का कोई आसान तरीका नहीं है।

इसके बजाय, अपनी स्टोरीबोर्ड पर एक नई विंडो नियंत्रक ऑब्जेक्ट खींचें। यह रिलेशनशिप सेगू के रूप में अपने स्वयं के सामग्री दृश्य के साथ आएगा। हालांकि, यदि कोई अलग दृश्य है जिसे आप खिड़की के लिए उपयोग करना चाहते हैं (उदाहरण के लिए: एक टैब व्यू कंट्रोलर), बस नया व्यू कंट्रोलर हटाएं और नए विंडो कंट्रोलर से कंट्रोल-ड्रैग को कंट्रोलर में देखें, जिसका विचार आप के लिए उपयोग करना चाहते हैं खिड़की सामग्री।

महत्वपूर्ण: स्टोरीबोर्ड में विंडो नियंत्रक वस्तु का चयन करें, और पहचान इंस्पेक्टर, एक स्ट्रिंग उस खिड़की (उदा .: "इंस्पेक्टर") की पहचान भी करेगा स्टोरीबोर्ड आईडी निर्धारित किया है।

फिर, बस खिड़की दिखाने के लिए एक छोटे से कोड लिखने:

var inspectorController: NSWindowController? 
@IBAction func showInspector(sender : AnyObject) { 
    if !inspectorController { 
     let storyboard = NSStoryboard(name: "Main", bundle: nil) 
     inspectorController = storyboard.instantiateControllerWithIdentifier 
      ("Inspector") as? NSWindowController 
    } 
    if inspectorController { inspectorController!.showWindow(sender) } 
} 

मैं वास्तव में यह बेहतर मुख्य स्टोरीबोर्ड किसी भी खिड़कियों के लिए बिल्कुल भी उपयोग करने के लिए नहीं मिला। कारणों में से एक कारण है क्योंकि स्टोरीबोर्ड (कम से कम अभी) के साथ, एप्लिकेशन लॉन्च होने पर प्रारंभिक सेग्यू को अवरुद्ध करने का कोई तरीका नहीं है, और विंडो विंडो कॉलर को मुख्य विंडो नियंत्रक पर कभी भी नहीं कहा जाता है।

इसके बजाय, एप्लिकेशन और/या दस्तावेज़ विंडो के लिए अलग स्टोरीबोर्ड बनाएं, और उन्हें तुरंत चालू करने के लिए ऐपडिलेगेट क्लास का उपयोग करें। अधिक जानकारी और एक कामकाजी उदाहरण in this thread.

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