2011-05-06 11 views
6

में keydownevent को ओवरराइड करें मैंने nstextfield का उप-वर्ग बनाया है और मैं कीडाउन ईवेंट ओवरराइड करता हूं लेकिन मेरा कोड काम नहीं करता है, तो मैं डी कीप ईवेंट ओवरराइड करता हूं और कोड पूरी तरह से काम करता है। मेरे keydown कोड (काम नहीं करता है):NSTextfield

-(void)keyDown:(NSEvent *)event { 
    NSLog(@"Key released: %hi", [event keyCode]); 

    if ([event keyCode]==125){ 

     [[self window] selectKeyViewFollowingView:self]; 
    } 
    if ([event keyCode]==126){ 

     [[self window] selectKeyViewPrecedingView:self]; 
    } 

} 

मेरे KeyUp कोड (यह काम करता है):

-(void)keyUp:(NSEvent*)event 
{if ([event keyCode]==125){ 

     [[self window] selectKeyViewFollowingView:self]; 
    } 
    if ([event keyCode]==126){ 

     [[self window] selectKeyViewPrecedingView:self]; 
    } 

    if ([event keyCode]==36){ 

     [[self window] selectKeyViewFollowingView:self]; 
    } 

    } 

मैं नहीं दिख रहा है, जहां मेरे keydown कोड के साथ समस्या है। कोई भी सुझाव स्वीकार किया जाएगा

संपादित करें: मैंने पढ़ा है कि आपको NSTextField के बजाय NSTextView को उपclass करना है।

+0

कृपया "काम नहीं करता" का वर्णन करने वाले विवरण प्रदान करें। –

+1

क्या यह एनएसएलओजी करता है? क्या इसे बिल्कुल बुलाया जा रहा है? क्या ये वही सटीक वर्ग का सटीक उदाहरण हैं जहां कोई काम करता है और कोई नहीं करता है? –

+0

यह nslog –

उत्तर

7

keydown घटना एक NSTextField में ओवरराइड नहीं किया जा सकता, अगर आप चाहते हैं को देखने के लिए चाहते हैं एक NSTextView इस्तेमाल कर सकते हैं या सिर्फ NSTextField में KeyUp घटना को ओवरराइड

8

आप का उपयोग NSTextFieldDelegate तरीकों से उपवर्गीकरण बिना यह कर सकते हैं:

@Darren Inksetter के रूप में, आप control:textView:doCommandBySelector:

पहले, अपने इंटरफ़ेस टैग में NSTextFieldDelegate घोषित कर सकते हैं। फिर विधि को लागू करें:

- (BOOL)control:(NSControl *)control textView:(NSTextView *)textView doCommandBySelector:(SEL)commandSelector 
{ 
    if(commandSelector == @selector(moveUp:)){ 
     // Do yourthing here, like selectKeyViewFollowingView 
     return YES; // Return YES means don't pass it along responders chain. Return NO if you still want system's action on this key. 
    } 
    if(commandSelector == @selector(moveDown:)){ 
     // Do the same with the keys you want to track 
     return YES; 
    } 
    return NO; 
} 
+0

यह प्रोटोकॉल फ़ंक्शन स्पष्ट रूप से मौजूद नहीं है। (मैकोज़ 10.13) – gerbil

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