2015-06-10 2 views
6

मैं NSControl के बारे में सीख रहा हूं। मुझे पता है कि NSCell ने ओएस एक्स 10.10 योसेमेट में बहिष्कार की अपनी सड़क शुरू कर दी है, और इसलिए मैं एक एपीआई का उपयोग नहीं करूँगा जो दूर जा रहा है। इसके अलावा, NSControl कक्षा संदर्भ से पता चलता है कि सभी सेल एक्सेसर्स को बहिष्कृत कर दिया गया है।ओएस एक्स 10.10 में, क्या मैं एनएससीएल के बिना एनएससींट्रोल को कार्यान्वित कर सकता हूं?

मैं ये सब समझता हूं, लेकिन यह स्पष्ट नहीं है कि लोगों के लिए NSControl उप-वर्गों को 10.10 पर लिखने के लिए अनुशंसित पाठ्यक्रम क्या है। इस विषय पर सभी ऐप्पल गाइड NSCell के बहिष्कार का कोई उल्लेख नहीं करते हैं। मुझे लगता है कि मैं सिर्फ पुराने तरीके से चीजें कर सकता हूं, लेकिन फिर मुझे अपने कोड को बदलने की आवश्यकता होगी जब ऐप्पल अगले स्तर पर NSCell के बहिष्कार को आगे बढ़ाएगा।

क्या NSCell का उपयोग किए बिना NSControl उपclass को कार्यान्वित करना भी संभव है?

कोई भी इस विषय पर किसी संसाधन को सलाह दे सकता है या मुझे लिंक कर सकता है? यह Google को मुश्किल साबित कर रहा है।

उत्तर

3

मैं इसे भी काम करने की कोशिश कर रहा हूं। मैं दुर्भाग्य से आपके सभी सवालों का जवाब नहीं दे सकता, लेकिन यहां तक ​​कि मैंने जो पाया है वह अब तक है।

AppKit Release Notes for OS X v10.10 में क्या हो रहा है, इसकी एक संक्षिप्त व्याख्या है, जिसे मैंने मूल रूप से How to create a custom themed NSButton without subclassing NSButtonCell? पर देखा था।

NSCell

मैक ओएस एक्स 10.10 का धीरे-धीरे प्रतिवाद कोशिकाओं के अंतिम निंदा की दिशा में एक और कदम लेता है। नियंत्रण के सेल तक सीधी पहुंच निराश होती है, और विधियां जो इसे बाद में रिलीज़ में औपचारिक रूप से बहिष्कृत की अनुमति देती हैं। महत्वपूर्ण कार्यक्षमता तक सेल-फ्री पहुंच प्रदान करने के लिए विभिन्न प्रकार के सेल-स्तरीय एपीआई को विभिन्न नियंत्रण उप-वर्गों में प्रचारित किया गया है। NSLevelIndicator, NSTextField, NSSearchField, NSSlider, और NSPathControl सभी के पास इस उद्देश्य के लिए नई गुण हैं। सेल-आधारित NSTableViews अब बहिष्कृत हैं, और दृश्य-आधारित NSTableViews इसके बजाय उपयोग किए जाने चाहिए। मैट्रिक्स-आधारित NSBrowsers को आइटम-आधारित इंटरफ़ेस के पक्ष में भी बहिष्कृत किया गया है।

10.10 दस्तावेज में लाल रंग में कई एनएससींट्रोल विधियां पार हो गई हैं। (वैसे, मुझे यकीन नहीं है कि यह अनजाने में "बहिष्कृत" है।)

continuous और enabled के लिए प्रलेखन चिह्न भ्रामक हैं, हालांकि। मैं NSControl घोषणाओं कि डॉक्स में काटी पर के लिए हेडर फाइल के माध्यम से देखा है और वहाँ कुछ अलग बातें चल रहा होने लगते हैं:

  1. इस विधि NS_DEPRECATED_MAC साथ अब मान्य नहीं है:

    // Use formatters instead. See -[NSControl formatter] and -[NSControl setFormatter:]. 
    - (void)setFloatingPointFormat:(BOOL)autoRange left:(NSUInteger)leftDigits right:(NSUInteger)rightDigits NS_DEPRECATED_MAC(10_0, 10_0); 
    
  2. इन विधियों एक NSDeprecated श्रेणी में दिखाई:

    @interface NSControl (NSDeprecated) 
    
    // Use formatters instead. See -[NSControl formatter] and -[NSControl setFormatter:]. 
    - (void)setFloatingPointFormat:(BOOL)autoRange left:(NSUInteger)leftDigits right:(NSUInteger)rightDigits NS_DEPRECATED_MAC(10_0, 10_0); 
    
    + (void)setCellClass:(Class)factoryId; 
    + (Class)cellClass; 
    
    - (id)cell; 
    - (void)setCell:(NSCell *)aCell; 
    - (id)selectedCell; 
    - (NSInteger)selectedTag; 
    
    - (void)setNeedsDisplay; // Use setNeedsDisplay:YES instead. 
    - (void)calcSize; 
    
    - (void)updateCell:(NSCell *)aCell; 
    - (void)updateCellInside:(NSCell *)aCell; 
    - (void)drawCellInside:(NSCell *)aCell; 
    - (void)drawCell:(NSCell *)aCell; 
    - (void)selectCell:(NSCell *)aCell; 
    
    @end 
    
  3. इन विधियों एप्लिकेशन प्रलेखन में कान "ओएस एक्स v10.8 में ओएस एक्स v10 के माध्यम से उपलब्ध है।9 ", लेकिन नहीं NSControl हेडर फाइल में है, इसलिए मैं वे पूरी तरह से हटा दिया गया है मान:।

    -userInterfaceLayoutDirection 
    -setUserInterfaceLayoutDirection 
    
  4. इन घोषणाओं पहले से तरीकों थे, लेकिन गुण में पुनर्संशोधित दिया है क्या हुआ के बारे में जानकारी के लिए this answer देखें । IsEnabled/setEnabled तरीकों तो इन घोषणाओं डॉक्स में क्रॉस आउट किया, लेकिन यह भ्रामक है:

    @property (getter=isContinuous) BOOL continuous; 
    @property (getter=isEnabled) BOOL enabled; 
    

मैं कैसे भी creati के बिना एक NSControl उपवर्ग बनाने के लिए के बारे में कोई अच्छी जानकारी नहीं मिली है ng NSCell सबक्लास, हालांकि स्पष्ट रूप से NSColorWell एक सेल-कम NSControl है।

मेरा वर्तमान मोटा निष्कर्ष यह है कि NSControl को NSCell पर काफी दृढ़ता से जोड़ा गया है, और किसी के बिना किसी का उपयोग करने के लिए समझदारी नहीं है। इसलिए मैं इसके बजाय NSView सबक्लास लिखने पर विचार कर रहा हूं।

मैं यहां अधिक जानकारी और सलाह की भी सराहना करता हूं!

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