2015-02-28 8 views
9

जब अपने आवेदन लॉन्च हुआ, जिसने पहले NSTextField इस तरह का चयन किया जा रहा है:एप्लिकेशन शुरू होने पर मैं अपना एनएसटीक्स्टफाल्ड अपने टेक्स्ट को हाइलाइट नहीं कर सकता हूं?

enter image description here

मैं NSTextField ठीक संपादित कर सकते हैं, लेकिन जब मैं संपादन समाप्त करने के लिए एंटर दबाएं, पाठ फिर से चयनित हो जाता है, और संपादन समाप्त नहीं होता है।

मैंने ऐप्पल ट्यूटोरियल here का पालन किया, और मुझे टेक्स्ट फ़ील्ड को हमेशा के लिए हाइलाइट किया गया था।

मैं इसे कैसे रोकूं? मुझे यह पसंद है इसलिए टेक्स्ट फ़ील्ड ऐप का पहला उत्तरदायी नहीं है, इसलिए इसे तुरंत संपादित नहीं किया गया है, और जब इसे संपादित किया जा रहा है, तो टेक्स्ट फ़ील्ड के बाहर क्लिक करना इसे समाप्त कर देगा। मुझे यकीन नहीं है कि बाद के मामले में संपादन को रोकने के लिए [[textField window]makeFirstResponder:nil] कहां रखा जाए।

मैं योसामेट 10.10.2 चला रहा हूं।

+0

हाय! मेरे पास एक समाधान हो सकता है जो काम करेगा। क्या आप टेक्स्ट फ़ील्ड में टैब करने में सक्षम होना चाहते हैं? – Sheamus

उत्तर

9

में becomeFirstResponder के डिफ़ॉल्ट कार्यान्वयन के कारण आपका टेक्स्ट फ़ील्ड पाठ का चयन कर रहा है।

चयन, उपवर्ग NSTextField रोकने के लिए, और becomeFirstResponder ओवरराइड किसी भी पाठ का चयन रद्द करने:

- (BOOL) becomeFirstResponder 
{ 
    BOOL responderStatus = [super becomeFirstResponder]; 

    NSRange selectionRange = [[self currentEditor] selectedRange]; 
    [[self currentEditor] setSelectedRange:NSMakeRange(selectionRange.length,0)]; 

    return responderStatus; 
} 

जिसके परिणामस्वरूप व्यवहार है कि क्षेत्र पाठ जब यह फोकस हो जाता है का चयन नहीं करता है।

अपने पहले आवेदनकर्ता को कुछ भी करने के लिए, makeFirstResponder:nil पर कॉल करने के बाद आपके एप्लिकेशन को लॉन्च करने के बाद कॉल करें। doInitWithContentView:(NSView *)contentView को परिभाषित करने के लिए मुझे NSObject उप-वर्ग करना पसंद है, और इसे मेरे NSApplicationDelegate से कॉल करें। नीचे दिए गए कोड में, _window एक IBOutlet है: क्योंकि विंडो स्वचालित रूप से पहले नियंत्रण करने के लिए ध्यान केंद्रित करने देता है

- (void) applicationDidFinishLaunching:(NSNotification *)aNotification { 
    // Insert code here to initialize your application 

    [_menuController doInitWithContentView:_window.contentView]; 
} 

कारण अपने क्षेत्र फोकस हो रही है जब आवेदन शुरू होता है। यह निर्धारित करता है कि बाएं से दाएं स्कैन करके सबसे पहले क्या माना जाता है, ऊपर नीचे (यह दाएं से दाएं स्कैन करता है, क्योंकि ऊपर दाईं ओर स्थित एक टेक्स्ट फ़ील्ड अभी भी केंद्रित होगा)। एक चेतावनी यह है कि यदि खिड़की restorable है, और आप एक्सकोड के भीतर से एप्लिकेशन को समाप्त कर देते हैं, तो जो भी फ़ील्ड अंतिम केंद्रित था, अंतिम निष्पादन से फोकस स्थिति को बनाए रखेगा।

+0

मुझे टेक्स्ट फ़ील्ड को अभी भी टेक्स्ट का चयन करने की आवश्यकता है, इसलिए बनने के लिए फर्स्ट रेस्पॉन्डर एक समाधान नहीं है। मैं वास्तव में पहले से ही कॉल करने की विधि का प्रयास कर चुका था फर्स्ट रेस्पॉन्डर: शून्य, लेकिन यह या तो काम नहीं करता है। मैंने यह भी सुनिश्चित किया कि मेरी खिड़की-नहीं-आराम से है, लेकिन यह समस्या का हिस्सा नहीं प्रतीत होता है। – Will

+0

जब आपको टेक्स्ट को चुनने के लिए बिल्कुल आवश्यकता होती है? क्या आप उस व्यवहार का वर्णन कर सकते हैं जिसे आपको अधिक विस्तार से चाहिए? – Sheamus

+0

यदि एकमात्र समय आप इसे नहीं चुनना चाहते हैं तो एप्लिकेशन शुरू होता है, तो शायद आपको केवल एक अलग जगह से 'मेक फर्स्ट रेस्पॉन्डर:' कॉल करना होगा। मैंने इसे एक बहुत ही सरल उदाहरण के साथ कोशिश की और यह मेरे लिए काम किया। क्या आपने इसे 'applicationDidFinishLaunching:' से कॉल करने का प्रयास किया था? – Sheamus

2

मैं आईबी का उपयोग कर रहा हूं, NSTextField पर Refuses First Responder नामक एक संपत्ति है। खिड़की प्रस्तुत होने के तुरंत बाद टेक्स्ट फ़ील्ड को हाइलाइट करना बंद कर देगा। this question में Refuses First Responder के बारे में कुछ और विस्तृत जानकारी है।

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