2009-04-18 10 views
15

पर ध्यान केंद्रित करें मेरे पास एक NSTextField है और यदि मैं बटन पर क्लिक करता हूं और टेक्स्ट के अंत में कर्सर को इस टेक्स्टफील्ड पर सेट करने के बजाय अपनी सामग्री सेट करना चाहता हूं, तो अगर कोई बटन को क्लिक करता है तो वह बस टाइप करना शुरू कर सकता है।एक NSTextField

अब तक मैं [NSTextField selectText] का उपयोग करता हूं, यह इस टेक्स्टफील्ड का चयन करता है लेकिन यह पूरे पाठ का चयन करता है ताकि अगर कोई बस टाइप करना शुरू कर देता है तो वह टेक्स्टफ़ील्ड में मौजूद सभी टेक्स्ट खो देता है।

उत्तर

19

ठीक है, मैं यह अब पता चला :)

- (IBAction)focusInputField:(id)sender { 
    [textField selectText:self]; 
    [[textField currentEditor] setSelectedRange:NSMakeRange([[textField stringValue] length], 0)]; 
} 

और RubyCocoa में यह है:

def select_input_field 
    @input.selectText self 
    range = OSX::NSRange.new(@input.stringValue.length, 0) 
    @input.currentEditor.setSelectedRange range 
end 
6

आप कुछ इस तरह के लिए करना चाहेंगे:

[[self window] makeFirstResponder:[self yourTextField]]; 
+0

यह पाठ का भी चयन करता है: -/ – Jeena

2

मैं एक इंजेम प्लगिनी लिख रहा हूं, मुझे एक ही समस्या थी:

- (void)gotEvent:(NSEvent *)newEvent 
{ 
    [mainWindow makeKeyAndOrderFront:self]; 
    [mainWindow makeFirstResponder:messageField]; 
    [mainWindow sendEvent:newEvent]; // will forward the typing event 
} 

इस काम :)

+0

आप कहां से प्राप्त करते हैं? – eonist

30

या और भी आसान

[yourTextField becomeFirstResponder]; 
+0

समस्या यह है कि यह सभी पाठ का चयन करता है और यदि आप प्रीपेप्टेड टेक्स्ट टाइप करना शुरू करते हैं, तो ओवरराइट किया जाएगा, मैं पाठ के पीछे कर्सर सेट करना चाहता था। – Jeena

+12

इस विधि को 10.5 में बहिष्कृत किया गया है, इसके अलावा, यदि आप इस विधि के लिए दस्तावेज़ पढ़ते हैं तो यह स्पष्ट रूप से बताता है कि 'इस विधि को सीधे कभी न करें।' –

+2

अच्छा बिंदु, एलन, मैंने अभी तक कॉल का एक गुच्छा हटा दिया है जो 10.8 एसडीके का उपयोग करके सीधे बनने के लिए फर्स्ट रेस्पॉन्डर का उपयोग करने के लिए अपवाद उठा रहा था। –

2

कुछ समय पहले मैं समान कार्य किया है। मेरा समाधान NSTextField के आंशिक पाठ चयन के लिए छोटी श्रेणी विधि लिख रहा था। यह विधि मूल चयन टेक्स्ट की तरह नौकरी करती है: करता है (नियंत्रण पर ध्यान केंद्रित करने के साथ)।

@implementation NSTextField(SelExt) 

-(void)selectTextRange:(NSRange)range 
{ 
    NSText *textEditor = [self.window fieldEditor:YES forObject:self]; 
    if(textEditor){ 
     id cell = [self selectedCell]; 
     [cell selectWithFrame:[self bounds] inView:self 
      editor:textEditor delegate:self 
      start:range.location length:range.length]; 
    } 
} 

@end 

इस विधि के साथ आप टेक्स्ट चयन कर सकते हैं जहां आप चाहते हैं और इसके ठीक बाद टाइप करना प्रारंभ करें।

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