2012-03-31 11 views
7

पर बटन जोड़ें मैं पिछले कुछ दिनों से अपने मस्तिष्क को रैकिंग कर रहा हूं कि यह कुछ आसान कैसे लगता है। मैंने चारों ओर खोज की है लेकिन कुछ भी नहीं मिला।विंडो शीर्षक पट्टी

मै मैक पर खुलने वाली सभी विंडो में एक बटन जोड़ने में सक्षम होना चाहता हूं (यह "एक्स" "-" + "बटन के विपरीत दाएं हाथ पर जाएगा)। मुझे विश्वास है कि जिस क्षेत्र में मैं बटन जोड़ना चाहता हूं उसे टाइटलबार कहा जाता है, हालांकि मुझे इस पर यकीन नहीं है।

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

मैं समझता हूं कि यह अनिवार्य रूप से ओएस के यूआई में "प्लगिंग" कर रहा है, लेकिन मैंने देखा है कि अन्य ऐप्स ऐसा करते हैं, जिससे मुझे लगता है कि यह सक्षम है।

बस इसके लिए कुछ पॉइंटर्स ढूंढ रहे हैं, कहीं मैं इसे पढ़ सकता हूं, कोड स्निपेट और केवल सामान्य सलाह, मैं कुछ भी ले जाऊंगा।

Screenshot

+0

बस सावधान रहें जहां आप इसे जोड़ते हैं- मैक ओएस एक्स 10.7 और ऊपर वाले उपयोगकर्ताओं के पास दाईं ओर एक "पूर्णस्क्रीन" बटन होगा। सुनिश्चित करें कि आपका बटन बाईं ओर ले जाया गया है। –

+0

एक उपयोगी संबंधित प्रश्न: http: // stackoverflow।कॉम/प्रश्न/3833241/जोड़-माध्यमिक-पाठ-टू-विंडो-शीर्षक-बार-इन-कोको –

उत्तर

6

यह वास्तव में एक दो भाग सवाल यह है:

यहाँ स्क्रीनशॉट जहाँ मैं बटन चाहते हैं। कैसे वहाँ एक बटन पाने के लिए के रूप में, मैं -[NSWindow standardWindowButton:] का उपयोग कर (शीर्षक पट्टी यानी) एक मौजूदा विंडो बटन और उसके superview पाने के लिए सुझाव देंगे:

NSButton *closeButton = [window standardWindowButton:NSWindowCloseButton]; // Get the existing close button of the window. Check documentation for the other window buttons. 
NSView *titleBarView = closeButton.superview; // Get the view that encloses that standard window buttons. 
NSButton *myButton = …; // Create custom button to be added to the title bar. 
myButton.frame = …; // Set the appropriate frame for your button. Use titleBarView.bounds to determine the bounding rect of the view that encloses the standard window buttons. 
[titleBarView addSubview:myButton]; // Add the custom button to the title bar. 

plugging में शायद सबसे आसान एक के रूप में करने के लिए है SIMBL प्लग-इन।

+0

क्या यह सभी स्थापित प्रोग्रामों पर काम करेगा? – JoePasq

+0

मैं जो कह सकता हूं, एनएसडब्ल्यूंडोक्लोस बटन का उपयोग करके और इसी तरह का उपयोग यह तय करने के लिए किया जाता है कि मानक बटन दिखाना है या नहीं। एपीआई यहां बहुत मददगार नहीं है, मुझे यह नहीं बताता कि विधि क्या वापस आएगी या कुछ भी। मेरा मतलब यह है कि, मुझे यकीन नहीं है कि मैं मानक विन्डो बटन का उपयोग कैसे करूंगा:] अपने स्वयं के बटन रखने के लिए, यह मौजूदा लोगों को संपादित करने के लिए प्रतीत होता है। – Timsk

+0

एपीआई अनुरोधित बटन लौटाता है। आप उन्हें छुपाने के लिए इसका उपयोग कर सकते हैं, लेकिन आपको इसकी आवश्यकता नहीं है। उदाहरण में, मानक विंडो बटन (i। E। शीर्षक बार दृश्य) को संलग्न करने वाले दृश्य को खोजने के लिए मौजूदा विंडो बटन का उपयोग किया जाता है। मैंने अपना उदाहरण विस्तारित किया है और टिप्पणियां जोड़ दी हैं। मुझे पूरा यकीन नहीं है कि आपका मतलब क्या है "मुझे यह नहीं बताता कि विधि क्या वापस आएगी या कुछ भी"। एनएसविंडो क्लास संदर्भ [स्पष्ट रूप से ऐसा करता है] (http://developer.apple.com/library/mac/documentation/Cocoa/Reference/ApplicationKit/Classes/NSWindow_Class/Reference/Reference.html#//apple_ref/occ/instm/ NSWindow/standardWindowButton :)। – gcbrueckmann

7

ओएस एक्स 10.10 (योसमेट) में टाइटल बार बटन जोड़ने का आधिकारिक रूप से समर्थित तरीका और बाद में NSTitlebarAccessoryViewController बनाकर -[NSWindow addTitlebarAccessoryViewController] का उपयोग करके इसे अपनी विंडो में जोड़कर है।

उदाहरण के लिए, मैं एक खिड़की एक शीर्षक पट्टी गौण दृश्य है है:

demo window title bar

सेट अप करने के लिए, मैं अपने स्टोरीबोर्ड में खिड़की नियंत्रक दृश्य करने के लिए एक स्टैंडअलोन दृश्य जोड़कर शुरू कर दिया।

accessory view

मेरे गौण दृश्य एक NSButton subview के साथ एक NSView है (आप एक स्टोरीबोर्ड का उपयोग करने की आवश्यकता नहीं है, लेकिन मैं इस परियोजना में किया था।)। बटन शीर्षक पुशपिन प्रदर्शित करने के लिए फ़ॉन्ट विस्मयकारी का उपयोग करता है।

outlet connection

फिर, अपनी खिड़की नियंत्रक के windowDidLoad, मैं NSTitlebarAccessoryViewController बनाने के लिए, सेट अपने गुणों में, और जोड़ें:

मैं अपने NSWindowController उपवर्ग में एक आउटलेट (चतुराई से नामित accessoryView) के लिए गौण दृश्य जुड़े यह खिड़की पर:

@IBOutlet var accessoryView: NSView! 
var accessoryViewController: NSTitlebarAccessoryViewController? 

override func windowDidLoad() { 
    super.windowDidLoad() 
    createAccessoryViewControllerIfNeeded() 
} 

fileprivate func createAccessoryViewControllerIfNeeded() { 
    guard self.accessoryViewController == nil else { return } 
    let accessoryViewController = NSTitlebarAccessoryViewController() 
    self.accessoryViewController = accessoryViewController 
    accessoryViewController.view = accessoryView 
    accessoryViewController.layoutAttribute = .right 
    self.window?.addTitlebarAccessoryViewController(accessoryViewController) 
} 
संबंधित मुद्दे