2009-06-19 11 views
20

का पृष्ठभूमि रंग बदलें मेरे पास एक मैक एप्लिकेशन में एक NSButton है जिसका रंग मैं प्रोग्रामिक रूप से बदलना चाहता हूं लेकिन मैंने जो कुछ भी कोशिश नहीं की, वह काम करने लगता है। मैंने NSButtonCell पर आउटपुट बनाने की कोशिश की और वहां पृष्ठभूमि रंग सेट किया लेकिन यह भी काम नहीं करता था। कोई भी कोड स्निपेट उपयोगी होगा।एनएसबटन

उत्तर

8

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

ऐसा लगता है कि आप ऐसा करना चाहते हैं जिसमें NSButtonCell subclassing और अपना स्वयं का चित्रण शामिल होगा। यदि आप इच्छित छवियों को प्राप्त करने के लिए बटन छवियों को दोहराना चाहते हैं, तो आप उत्कृष्ट Theme Park उपयोगिता को ऐप्पल के बटन छवियों की प्रतियों को निकालने और उन का उपयोग करने के लिए उपयोग कर सकते हैं। मैं कुछ इंटरफ़ेस तत्वों को "चोरी" करने के लिए स्वयं को ऐसा करने के लिए स्वीकार करूंगा जो अन्यथा पहुंच योग्य नहीं हैं, जैसे आईट्यून्स के स्क्रोलर।

+0

यह बताता है कि मैं पृष्ठभूमि को क्यों संशोधित नहीं कर सकता संपत्ति। थीम पार्क एक वास्तविक मणि है! – aleemb

+0

माउंटेन शेर पर ऐसा करने के बारे में कोई विचार है? थीम पार्क को तेंदुए की आवश्यकता है। –

34

मान लें कि सबकुछ आपके सीमाहीन बटन के लिए आईबी में लगा हुआ है। setBackgroundColor प्रलेखन से

// *.h file 
IBOutlet NSButton* myButton; 

// *.m file 
[[myButton cell] setBackgroundColor:[NSColor redColor]]; 

नोट:

"पृष्ठभूमि रंग केवल प्रयोग किया जाता है जब सीमारहित बटन ड्राइंग।"

यदि यह आपके लिए नहीं करेगा तो आपको NSButton को ओवरराइड करने और स्वयं को चित्रण को लागू करने की आवश्यकता होगी।

गुड लक।

+0

यह: स्टाइल, इंटरफ़ेस बिल्डर से की मेरी अधिकांश खिड़कियों पर बहुत अच्छा काम करता है। कोई विचार यह एनएसविंडो पर एनएसटीयूएलआरओ के साथ क्यों काम नहीं करता है जो इसके NSViews को अंदर और बाहर स्वैप करता है? उन 'swappable' NSViews पर बटन पृष्ठभूमि रंग से बिल्कुल प्रभावित नहीं होते हैं और फिर भी मैं उनके टेक्स्ट का रंग बदल सकता हूं ठीक है = ( – valheru

+0

यह तेजी से काम नहीं कर रहा है। मैंने नहीं किया सेटबैकग्राउंडर विधि –

+0

एनएसबटन कैल पर वह संपत्ति अभी भी स्विफ्ट में है। '(बटन.cell as? NSButtonCell) जैसी कुछ होनी चाहिए? पृष्ठभूमि रंग = एनएससीओलर.रेड – Mark

-10

UIElement (तत्व बटन, दृश्य की तरह कुछ भी की है ....)

UIElement * VARNAME;

[varname setBackgroundColor:[UIColor colorWithRed:0.8 green:0.8 blue:0.6 alpha:1.0]]; 

जैसे: UIButton * pButton;

[pButton setBackgroundColor:[UIColor colorWithRed:0.8 green:0.8 blue:0.6 alpha:1.0]]; 
+2

यह एनएसबटन के लिए मदद नहीं करेगा। –

+2

कृपया प्रश्न पढ़ें .. यह कहता है कि एनएसबटन यूआईबटन – ValayPatel

3

मार्क का उत्तर सही है। लेकिन अगर कोड द्वारा ऐसा करना आपके लिए गन्दा होगा, तो ऐसा करने का एक और तरीका यह है कि इसे सीधे इंटरफ़ेस बिल्डर में सेट करना है।

  1. इंटरफ़ेसबिल्डर में बटन ढूंढें और उस पर क्लिक करें।
  2. इंटरफ़ेस बिल्डर के ऑब्जेक्ट ब्राउज़र अनुभाग पर आप उस बटन को देखेंगे जिस पर आपने क्लिक किया था ड्रॉपडाउन प्रकटीकरण आइकन है। इस पर क्लिक करें। इसके बाद यह आपको NSButton के NSButtonCell दिखाएगा। इस पर क्लिक करें।
  3. NSButtonCell चयनित के साथ, पहचान-निरीक्षक पर क्लिक करें।
  4. पहचान-निरीक्षक में User Defined Runtime Attributes
  5. सेक्शन को देखने के लिए छोटे प्लस (+) चिह्न पर क्लिक करें। मान में 3 गुण होंगे। (ए) मुख्यपथ (बी) प्रकार (सी) मूल्य
  6. बदलें करने के लिए मुख्यपथ: backgroundColor। इस प्रकार को बदलें: Color।मान को बदलें: आप जो भी रंग चाहते हैं (एक रंग पिकर प्रदर्शित किया जाएगा)

हो गया।

let button = NSButton() 
    button.title = "" 
    button.bezelStyle = .texturedSquare 
    button.isBordered = false //Important 
    button.wantsLayer = true 
    button.layer?.backgroundColor = NSColor.red.cgColor 
+0

नहीं है तर्कसंगत रूप से यह काम करना चाहिए लेकिन यह मेरे लिए काम नहीं करता है। –

+0

बटन को सीमाहीन पर सेट करना याद रखें। –

+0

- मैं हूं यह नहीं कह रहा कि यह काम नहीं करता है (एक्सकोड 8.2.1) लेकिन इसके बारे में लगभग एक घंटे खर्च करने के बाद, इससे कोई फर्क नहीं पड़ता कि मैंने क्या बदल दिया है, बस काम नहीं करता – Yatko

4

यहाँ यह करने के लिए एक और संभव तरीका है। मैंने एक NSButton उपclass संकलित किया है जो पृष्ठभूमि रंग, सीमा विशेषताओं (रंग, चौड़ाई, कोनों), और शीर्षक विशेषताओं (रंग, फ़ॉन्ट) सेट करना आसान बनाता है।

उपयोग करने के लिए स्वतंत्र महसूस: https://github.com/philfung/osx-dudley/blob/master/DudNSButton.swift

0

इन महान जवाब के लिए धन्यवाद:

+0

अच्छा काम - इसे साझा करने के लिए धन्यवाद। आप स्विफ्ट के नवीनतम संस्करण के लिए अपडेट करना चाहेंगे क्योंकि यह अब तक चलने वाला प्रतीत नहीं होता है –

0

एक विधि बटन के पीछे एक दृश्य बना सकते हैं और इस बात का रंग सेट करने के लिए है। यह एक ही फ्रेम के साथ दृश्य बनाता है और बटन को दृश्य के शीर्ष पर रखता है। मैं यह सुनिश्चित करने के लिए बटन पर एक टैग का उपयोग करता हूं कि हम केवल एक बार दृश्य जोड़ दें, इसलिए यूआई ड्राइंग करते समय विधि को बार-बार कहा जा सकता है।

मैंने टेक्स्ट रंग सेट करने के लिए अपना कोड शामिल किया है।

बदलें रंग और अल्फा के रूप में वांछित:

NSColor *colour = [NSColor colorWithRed:0.0 green:0.0 blue:1.0 alpha:0.5] ; 
[self styleButton:button colour:colour] ; 

-(void) styleButton:(NSButton *)button colour:(NSColor *)colour { 

    [self setButton:button fontColor:[NSColor whiteColor]]; 

    if(button.tag == 9901) return ; 

    button.bezelStyle = NSBezelStyleTexturedSquare ; 
    [button setBordered:NO]; 

    NSView *b2 = [[NSView alloc] initWithFrame:button.frame] ; 
    [button.superview addSubview:b2] ; 

    b2.layer.backgroundColor = colour.CGColor; 

    [button removeFromSuperview]; 
    [b2.superview addSubview:button]; 

    button.tag = 9901 ; 
} 

-(void) setButton:(NSButton *)button fontColor:(NSColor *)color { 
    NSMutableAttributedString *colorTitle = [[NSMutableAttributedString alloc] initWithAttributedString:[button attributedTitle]]; 
    [colorTitle addAttribute:NSForegroundColorAttributeName value:color range:NSMakeRange(0, button.attributedTitle.length)]; 
    [button setAttributedTitle:colorTitle]; 
} 
3

मैं एक NSButton उपवर्ग यह बटन पृष्ठभूमि रंग, पाठ रंग, आइकन रंग, सीमाओं और अन्य प्रकार बदलने के लिए सुपर आसान बना देता है कि FlatButton बुलाया बना लिया है

https://github.com/OskarGroth/FlatButton

FlatButton for macOS

+0

भयानक काम के लिए धन्यवाद। मैं अभी भी आश्चर्यचकित हूं कि मैकोज़ यूआई तत्वों के लिए कितना छोटा अनुकूलन है।वैसे, क्या आपके फ़्लैटबटन को टॉगल बटन के रूप में उपयोग करना संभव है? –

+0

@SteveBegin धन्यवाद! हां, एक साधन विकल्प है। – Oskar

+0

कमाल का काम - लेकिन जब मैं बटन में आइकन जोड़ने का प्रयास करता हूं तो वे अनुपात से बाहर निकलते हैं। –

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