मैं प्रोग्रामिक रूप से iOS 7 डिफ़ॉल्ट ब्लू कलर कैसे प्राप्त कर सकता हूं?


223

मैं अपने ऐप में कस्टम एलिमेंट्स बना रहा हूं और नए iOS के लुक और फील को मैच करना चाहता हूं। iOS 7 ने हमारे लिए एक बहुत ही सामान्य हल्का नीला रंग, कई तत्वों के लिए डिफ़ॉल्ट रंग या रंग पेश किया, जिसमें सिस्टम बटन, खंडित नियंत्रण, आदि शामिल हैं। उन्होंने आईबी का उपयोग करके रंग का चयन करना आसान बना दिया है, जैसा कि यहां देखा गया है:

यहां छवि विवरण दर्ज करें

हालाँकि, मैंने यह नहीं पाया कि रंग को आसानी से प्रोग्रामेटिक रूप से कैसे एक्सेस किया जाए। मैंने UIColor प्रलेखन की जाँच की , और कक्षा में ही ब्लू सिस्टम रंग के लिए कोई एक्सेसर नहीं लगता है।

यहाँ मेरा सवाल है: क्या इस रंग के लिए एक साधारण एक्सेसर मौजूद है? [UIColor ?]या ऐसा कुछ? यदि नहीं, तो क्या किसी को उस रंग के लिए सटीक आरजीबी मान पता है ?

जवाबों:


252

self.view.tintColorएक दृश्य नियंत्रक से, या self.tintColorएक UIViewउपवर्ग से उपयोग करें ।


6
मैं यह कहने जा रहा था कि आप बस इस्तेमाल कर सकते हैं UIView().tintColor, लेकिन वास्तव में आप ऐसा नहीं कर सकते। इस बात पर निश्चित नहीं है कि
यूआईवीवाई

1
@DanRosenstark मुझे लगता है UIWindowया हो सकता है कि इसके मूल दृश्य का मूल संस्करण हो। दृश्य उत्तरदाता श्रृंखला में उच्च विचारों से उनके रंग का रंग प्राप्त करते हैं, लेकिन आपके उदाहरण में नए दृश्य का कोई पर्यवेक्षक नहीं है।
एरॉन ब्रेजर

2
self.view.tintColorभीतर से UIViewController.viewDidLoad()सही नीला देता है।
निकोलस मिआरी

234

यह प्रतीत होता है [UIColor colorWithRed:0.0 green:122.0/255.0 blue:1.0 alpha:1.0]

स्क्रीनशॉट विंडो विंडो दिखा रहा है


2
दिलचस्प है, मेरे सिस्टम पर डिफ़ॉल्ट नीला 0: 128: 255 (एक ही टूल का उपयोग करके) प्रतीत होता है। मुझे आश्चर्य है कि क्या Apple ने हाल ही में इसे बदल दिया है?
जोएल एच।

@JoelH। वर्तमान में आपके द्वारा उपयोग किए जा रहे रंग स्थान की जाँच करें।
रिचर्ड जे। रॉस III

19
इस बात का ध्यान रखें कि आप इसका उपयोग कैसे करते हैं, क्योंकि यह बाद के iOS रिलीज़ में बदल सकता है।
ज़ेव ईसेनबर्ग

7
हां, निश्चित रूप से किसी भी मूल्य को हार्ड-कोड करने के लिए एक अच्छा विचार नहीं है जो संभावित रूप से बदल सकता है। खासतौर पर तब जब वास्तविक मूल्य को क्वेरी करने के लिए एपीआई हो।
निकोलस मिआरी

1
स्विफ्ट संस्करणUIColor(red: 0.0, green: 122.0/255.0, blue: 1.0, alpha: 1.0)
डौग अमोस

90

iOS 7 डिफ़ॉल्ट नीला रंग है R:0.0 G:122.0 B:255.0

UIColor *ios7BlueColor = [UIColor colorWithRed:0.0 green:122.0/255.0 blue:1.0 alpha:1.0];

51
और अगर आप हेक्स पसंद करते हैं:0x007aff
जेसन मूर

4
यह बहुत भविष्य का प्रमाण नहीं है - यदि Apple डिफ़ॉल्ट टिंट रंग बदलता है या उपयोगकर्ताओं को डिफ़ॉल्ट टिंट रंग सेट करने देता है तो आपके ऐप को सही रंग नहीं मिलेगा।
प्रीवेट

4
और एक अन्य प्रणाली में: # 007AFF
डेलिज़न

3
स्विफ्ट में: DefaultTintColor = UIColor (लाल: 0.0, हरा: 122/255, नीला: 1.0, अल्फा: 1)
Jervisbay

49

UIButton के लिए प्रलेखन के अनुसार:

IOS v7.0 में, UIView के सभी उपवर्ग बेस क्लास से टिंटकलर के लिए अपने व्यवहार को प्राप्त करते हैं। अधिक जानकारी के लिए UIView स्तर पर tintColor की चर्चा देखें।

यह मानकर कि आप डिफ़ॉल्ट मान हथियाने से पहले टिंटकलर को नहीं बदलते हैं, आप उपयोग कर सकते हैं:

self.view.tintColor

रंग को हथियाने का सबसे सुरक्षित तरीका लगता है।
बजे क्लिफ हेलसेल

यह मेरे लिए काम करता है। मेरे sharedApplication()एक नहीं है keyWindowके साथtintColor
SimplGy

26

यहां डिफ़ॉल्ट सिस्टम टिंट रंग प्राप्त करने की एक सरल विधि है:

+ (UIColor*)defaultSystemTintColor
{
   static UIColor* systemTintColor = nil;
   static dispatch_once_t onceToken;
   dispatch_once(&onceToken, ^{
      UIView* view = [[UIView alloc] init];
      systemTintColor = view.tintColor;
   });
   return systemTintColor;
}

आपको मुख्य थ्रेड सामान के लिए एक बार प्रेषण की आवश्यकता नहीं है। एक सरल अगर शून्य पर्याप्त होगा।
23

6
मान लें कि विधि को केवल मुख्य धागे से कहा जाएगा? ओवरहेड dispatch_onceकाफी कम है और एक एकल है यदि सामान्य मामले में जांच की जाती है।
रिक

@ क्लिक करें क्योंकि UIKit API बैकग्राउंड थ्रेड-सुरक्षित नहीं है, इसलिए इसे मुख्य थ्रेड के बाहर कॉल करने की अनुमति वैसे भी नहीं है।
एंड्रे टारनटोसव

@AndreyTarantsov सच है कि है, लेकिन यह है उपयोग करने के लिए सुरक्षित UIColorएक से अधिक थ्रेड पर। एक में यह रैपिंग dispatch_onceसुरक्षित रूप से किसी भी धागे पर इस रंग को पुन: प्राप्त करने के लिए अनुमति देता है। और फिर, ओवरहेड बहुत कम है।
रिक

3
@AndreyTarantsov एक त्वरित परीक्षण से यह ठीक काम करने लगता है। UIVIew प्रलेखन से : "आपके एप्लिकेशन के उपयोगकर्ता इंटरफ़ेस में हेरफेर मुख्य थ्रेड पर होना चाहिए। इस प्रकार, आपको हमेशा अपने एप्लिकेशन के मुख्य थ्रेड में चल रहे कोड से UIView क्लास के तरीकों को कॉल करना चाहिए। केवल समय ऐसा नहीं हो सकता है। आवश्यक तब होता है जब दृश्य ऑब्जेक्ट स्वयं बनाते हैं लेकिन मुख्य धागे पर अन्य सभी जोड़तोड़ होने चाहिए। "
रिक


16

तेजी से 4 रास्ता:

extension UIColor {
  static let system = UIView().tintColor!
}

मैं आपको जोरदार अल्ट्रैपिंग का उपयोग करने की दृढ़ता से सलाह नहीं देता हूं, क्योंकि यह एप्लिकेशन क्रैश का कारण बन सकता है, अगर UIKit फ्रेमवर्क का डिफ़ॉल्ट व्यवहार किसी भी अगले संस्करण में बदल दिया जाएगा। इसके अलावा एक यूआईवीईवाई उदाहरण से टिंट रंग प्राप्त करना यह गारंटी नहीं दे सकता है कि यह रंग एक सिस्टम टिंट रंग है।
स्टेनिस्लॉ बारानूसकी

@StanislauBaranouski उन्हें क्यों बदलना चाहिए? कृपया अपनी बात स्पष्ट करें
दिमित्री कोज़लोव

यहाँ कोई स्पष्टीकरण की आवश्यकता नहीं है, यह केवल एक बुरा अभ्यास है जिसका उपयोग करने के लिए मजबूर किया जाता है, खासकर यदि आप इससे बच सकते हैं।
स्टैनिस्लॉ बारानूसकी

15

यह विस्तार आपको देशी प्रणाली को नीला रंग देता है।

extension UIColor {

    static var systemBlue: UIColor {
        return UIButton(type: .system).tintColor
    }

}

अपडेट करें

कृपया भूल जाओ कि मैंने ऊपर क्या लिखा है, अभी पता लगाया है - हम पूर्वनिर्धारित सिस्टम रंगों के साथ मूल विस्तार कर रहे हैं, जिसे हम सिस्टम ब्लू सहित ढूंढ रहे हैं :

// System colors

extension UIColor {


    /* Some colors that are used by system elements and applications.
     * These return named colors whose values may vary between different contexts and releases.
     * Do not make assumptions about the color spaces or actual colors used.
     */

    ... 

    @available(iOS 7.0, *)
    open class var systemBlue: UIColor { get }
    ... 
}

आप इसे सीधे उपयोग कर सकते हैं:

myView.tintColor = .systemBlue

1
जब भी आप systemBlue से इस बेहतर कलर को एक बार टायलेट करेंगे तब यह हर बार UIButton बनाएगा। आंतरिक विस्तार में आंतरिक शब्द का उपयोग करना उपयोगकर्ता के अनुकूल नहीं है। स्थिर के बजाय कक्षा का उपयोग करने के लिए समान। और इसे "ब्लू" कहना सही नहीं है, क्योंकि इस रंग को बाद में macOS Mojave की तरह बदला जा सकता है। तो static let system = UIView().tintColor!अभी भी आपके वैरिएंट से काफी बेहतर है।
दिमित्री कोज़लोव

@DmitryKozlov आप सही, बेहतर स्थिर कारण स्मृति प्रदर्शन का उपयोग करने के लिए। उस ओर इशारा करने के लिए धन्यवाद। लेकिन इसे "ब्लू" कहना अभी भी iOS 12 तक काम करता है और यह macOS से संबंधित नहीं है। MacOS के लिए आपको NSColor प्रकार से निपटना होगा।
स्टैनिस्लॉ बारानूसकी


10

UIWindow.tintColorविधि iOS8 में मेरे लिए काम नहीं कर रहा था (यह अभी भी काला था), तो मैं यह करने के लिए किया था:

let b = UIButton.buttonWithType(UIButtonType.System) as UIButton
var color = b.titleColorForState(.Normal)

यह एक में देखा उचित नीली टिंट दिया UIBarButtonItem


थोड़ा गंदा लगता है, लेकिन यह लिंक कलर को हार्डकोड करने से बेहतर है जो समय के साथ बदल सकता है।
टाइमगर्लसन

7

आईओएस 7 से एक एपीआई है और आप टिंट रंग के साथ (और सेट) प्राप्त कर सकते हैं:

self.view.tintColor

या यदि आपको CGColor की आवश्यकता है:

self.view.tintColor.CGColor

6

कई मामलों में जो आपको चाहिए वह सिर्फ है

[self tintColor] 
// or if in a ViewController
[self.view tintColor]

या तेजी के लिए

self.tintColor
// or if in a ViewController
self.view.tintColor


3

रंग सेट करते समय आप इस तरह से रंग सेट कर सकते हैं

[UIColor colorWithRed:19/255.0 green:144/255.0 blue:255/255.0 alpha:1.0]

/255.0प्रत्येक rgbमान के साथ लिखना क्यों आवश्यक है ?
आदिल मलिक

7
क्योंकि मैक पर रंग 0.0 और 1.0 के बीच एक फ्लोट हैं।
मल्हल

2

UIColor में एक श्रेणी जोड़ते हुए निम्नलिखित तरीके से आपको यह उपलब्ध कराया जाएगा कि आपको कभी भी इसकी आवश्यकता हो या फिर इसकी परिभाषा को बदलकर अपने कोड को बदल दें:

@interface UIColor (iOS7Colors)

+ (instancetype)iOS7blueColor;

@end

@implementation UIColor (SpecialColors)

+ (instancetype)iOS7blueColor;
{
    return [UIColor colorWithRed:0.0f green:0.22f blue:122.0/255.0 alpha:1.0f];
}

एक बार जब आप अपने कोड में श्रेणी आयात कर लेते हैं तो आप रंग का उपयोग करके कॉल कर सकते हैं:

UIColor *myBlueColor = [UIColor iOSblueColor];

कृपया, इस स्टैकओवरफ़्लो को पढ़ने का प्रयास करें ।help/ deleted-answers , अधिक समझ पाने के लिए कि कैसे उत्तर न दें । अर्थात्: "ऐसे उत्तर जो मूल रूप से प्रश्न का उत्तर नहीं देते हैं": बाहरी साइट के लिंक से मुश्किल से अधिक
रेडिम कोहलर

हम से प्राप्त उह कैसे blueकरने के लिए redमें+ (instancetype)iOS7redColor;
ta.speot.is
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.