2008-08-14 11 views
15

मैं धीरे-धीरे उद्देश्य-सी और कोको सीख रहा हूं, और पाठ दृश्यों में महत्वपूर्ण घटनाओं को कैप्चर करने के लिए अब तक एकमात्र तरीका प्रतिनिधिमंडल का उपयोग करना है, लेकिन मुझे उपयोगी दस्तावेज़ीकरण और उदाहरणों को इस तरह कार्यान्वित करने के उदाहरणों में समस्याएं मिल रही हैं उपाय। क्या कोई मुझे सही दिशा में इंगित कर सकता है या कुछ पहली हाथ की मदद कर सकता है?NSTextView में प्रमुख ईवेंट कैप्चर करने का सबसे अच्छा तरीका?

उत्तर

14

आम तौर पर, जिस तरह से आप इसे लागू करते हैं, वह केवल आपके दृश्य के नियंत्रक को आवश्यक फ़ंक्शन जोड़ना और उसके प्रतिनिधि को सेट करना है। उदाहरण के लिए, यदि दृश्य लोड होने पर कोड चलाने के लिए आप चाहते हैं, तो आप केवल अपने दृश्य को नियंत्रक को सौंपें, और awakeFromNib फ़ंक्शन को लागू करें।

तो, एक पाठ दृश्य में एक महत्वपूर्ण प्रेस पता लगाने के लिए, सुनिश्चित करें कि आपके नियंत्रक पाठ दृश्य का प्रतिनिधि है, और फिर लागू करें:

- (void)keyUp:(NSEvent *)theEvent 

ध्यान दें कि यह एक विरासत NSResponder विधि, नहीं एक NSTextView है तरीका।

+1

यदि आप इसे प्रतिनिधि में डालते हैं तो कुंजीअप लागू नहीं किया जाता है। आपको NSTextView को उपclass करना होगा और उसे वहां रखना होगा। –

2

हमें यह बताना महत्वपूर्ण है कि आप वास्तव में क्या करने की कोशिश कर रहे हैं - उच्च स्तर का लक्ष्य जो आपको लगता है कि एक एनएसटीक्स्टव्यू में महत्वपूर्ण घटनाओं को कैप्चर करना होगा।

उदाहरण के लिए, जब कोई मुझसे पूछता है कि एनएसटीएक्स्ट फ़ील्ड में महत्वपूर्ण घटनाओं को कैप्चर करना है, तो वे वास्तव में जानना चाहते हैं कि फ़ील्ड में इनपुट को कैसे सत्यापित किया जाए। यह फ़ील्ड के फॉर्मेटर को NSFormatter (चाहे कोको या कस्टम एक में शामिल स्वरूपकों में से एक) के उदाहरण पर सेट करके किया जाता है, न कि कीस्ट्रोक को सीधे प्रोसेस करके।

तो उस उदाहरण को देखते हुए, आप वास्तव में क्या करने की कोशिश कर रहे हैं?

1

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

तो, मैंने डैनी द्वारा सुझाए गए अनुसार, प्रतिनिधिमंडल में अपना जवाब ढूंढ लिया। डैनी की पोस्ट से मुझे क्या समझ में नहीं आया था कि प्रतिनिधि वस्तु में प्रतिनिधि-सक्षम तरीकों का एक सेट है, और प्रतिनिधि को घटनाओं को लागू करना होगा। और इसलिए टेक्स्टव्यू के लिए, मैं विधि टेक्स्टडिड चेंज ढूंढने में सक्षम था, जिसने मुख्य प्रेस को कैप्चर करने की तुलना में एक बेहतर तरीके से जो भी हासिल किया था, पूरा किया। इसलिए यदि मैं इसे अपने नियंत्रक में लागू करता हूं:

- (void)textDidChange:(NSNotification *)aNotification; 

मैं संपादित किए जा रहे पाठ का जवाब दे सकता हूं। निश्चित रूप से, अन्य विधियां उपलब्ध हैं, और मैं उनके साथ खेलने के लिए उत्साहित हूं, क्योंकि मुझे पता है कि मैं पूरी तरह से सीखूंगा जैसा मैं करता हूं। फिर से धन्यवाद, दोस्तों।

10

बस वाक्य रचना हाइलाइटिंग के लिए एक टिप:

ही बार में पूरा पाठ दृश्य पर प्रकाश डाला न करें - यह बहुत धीमी है। -editedRange का उपयोग करके अंतिम संपादित टेक्स्ट को भी हाइलाइट न करें - यदि उपयोगकर्ता टेक्स्ट व्यू में टेक्स्ट के बड़े हिस्से को चिपकाता है तो यह बहुत धीमा है। अपने हाइलाइटिंग कोड को

NSRect visibleRect = [[[textView enclosingScrollView] contentView] documentVisibleRect]; 
NSRange visibleRange = [[textView layoutManager] glyphRangeForBoundingRect:visibleRect inTextContainer:[textView textContainer]]; 

तो फिर तुम visibleRange फ़ीड:

इसके बजाय आप दिखाई दे रहे पाठ जो इस तरह से किया जाता है को उजागर करने की जरूरत है।

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