2011-04-05 13 views
30

मैं जानना चाहता हूं कि कोको मैक प्रोग्रामिंग में बटन पर एक नई विंडो कैसे खोलें। मेरी मदद करो। मैं एक मैक एप्लिकेशन कर रहा हूं जिसे विशेष बटन क्लिक पर एक नई मैक विंडो खोलने की जरूरत है।बटन पर एक नई विंडो कैसे खोलें कोको मैक एप्लिकेशन में क्लिक करें?

उत्तर

42

आप नई विंडो के लिए एक अलग वर्ग बनाना चाहते हैं, तो निम्न चरणों हैं:

  1. एक वर्ग जो NSWindowController जैसे की एक उप वर्ग है बनाएं NewWindowController
  2. NewWindowController क्लास के लिए विंडो xib बनाएं।
  3. बटन पर क्लिक कोड के रूप में पर:

    NewWindowController *windowController = [[NewWindowController alloc] initWithWindowNibName:@"You Window XIB Name"]; 
    [windowController showWindow:self]; 
    
+0

धन्यवाद ... यह अच्छी तरह से काम करता है ... :) आपने अच्छी तरह से समझाया ... धन्यवाद ... मैं कुछ दिनों की तलाश में था और अब यह बहुत अच्छा काम करता है ... :) – ShinuShajahan

+5

मैंने एक ही चीज़ की कोशिश की है , लेकिन मेरी समस्या यह है कि नई खिड़की प्रदर्शित होने के तुरंत बाद बंद हो जाती है। मेरे पास वहां कोई कोड नहीं है इसलिए मैं नहीं देखता कि मैं क्या गलत कर रहा हूं। कोई विचार? – Interfector

+0

@ इंटरफेक्टर मुझे एक ही समस्या है .. क्या आपने इसे समझ लिया? –

11
NSWindowController * wc=[[NSWindowController alloc] initWithWindowNibName:@"your_nib_name"]; 
[wc showWindow:self]; 
+0

@ सौरभ-वाह! बहुत बहुत धन्यवाद! यह काम किया है ... धन्यवाद ... मैं स्टैक ओवरफ्लो के लिए नया हूं और यह बहुत प्रभावशाली है ... :) – ShinuShajahan

+0

वास्तव में मैं पिछले कुछ दिनों से इसकी तलाश कर रहा था! :) मैंने अलग कोशिश की लेकिन NSWindowController subclass नहीं किया !!! – ShinuShajahan

+0

उप-वर्गीकरण का उत्तर इस से अधिक मूल्यांकन क्यों किया गया था? निश्चित रूप से subclassing एक सरल, अधिक सुरुचिपूर्ण जवाब नहीं है? – fatuhoku

6
  1. एक वर्ग जो NSWindowController जैसे की एक उप वर्ग है बनाएं NewWindowController
  2. NewWindowController क्लास के लिए विंडो xib बनाएं।
  3. बटन पर क्लिक करें कोड के रूप में:

    NewWindowController *controllerWindow = [[NewWindowController alloc] initWithWindowNibName:@"You Window XIB Name"]; [controllerWindow showWindow:self];

हाँ, पर अगर यह कोड कुछ समारोह के अंदर है खिड़की बंद कर देता। यहां समाधान है।

blah.h

@interface blah : NSObject { 
    ... 
    NewWindowController *controllerWindow; 
    ... 
} 

में blah.m

@implementation 
... 
    -(IBAction)openNewWindow:(id)sender { 
     controllerWindow = [[NewWindowController alloc] initWithWindowNibName:@"You Window XIB Name"]; 
     [controllerWindow showWindow:self]; 
    } 
... 
+2

इसे उद्धृत करने, जवाब देने और फिर अपना पोस्ट करने के बजाय मौजूदा उत्तर (जब आप सक्षम हैं) पर एक टिप्पणी जोड़ना बेहतर है। –

+1

@AdrianWragg, हाँ, मैं नौसिखिया हूँ, इसलिए मुझे इसके लिए खेद है। – WildMassacre

+1

अच्छा ... और मैं पिछले एक को कैसे बंद कर सकता हूं? यह कोड एक बार में दो खिड़कियां खुलता रहता है। – mthama

5

स्विफ्ट 3: अपने स्टोरीबोर्ड WindowController करने के लिए जाने -> पहचान निरीक्षक -> storyBoardID: भरें: MainWindow। फिर अपने वर्तमान ViewController से निम्न विधि को स्टोरीबोर्ड पर बटन लिंक:

@IBAction func newWindow(_ sender: Any) { 
    let myWindowController = self.storyboard!.instantiateController(withIdentifier: "mainWindow") as! NSWindowController 
    myWindowController.showWindow(self) 
} 
संबंधित मुद्दे