2012-02-27 11 views
7

हाय सब लोग,NSTextField कस्टम में संपादित नहीं NSWindow

अगर मैं अपने नियंत्रक के ध्यान में रखते हुए NSTextField बनाने तो सब ठीक है - क्षेत्र संपादन योग्य है। दुर्भाग्य से, मुझे नए कस्टम NSWindow में NSTextField बनाना है। मेरा कोड बेलो एक ऐसा क्षेत्र बनाता है जो फोकस के बिना दिखता है (टेक्स्ट चयन ग्रे है) और संपादन योग्य नहीं है (कोई कर्सर नहीं है और कुंजी स्ट्रोक पर कोई प्रतिक्रिया नहीं है)। मैं माउस के साथ पाठ चयन बदल सकता हूं लेकिन यह सब कुछ है।

क्या मुझे एनएसविंडो को प्रमुख स्ट्रोक प्राप्त करने में सक्षम करना है?

आपकी मदद की सराहना, --Josef

 NSRect windowRect = [[self.window contentView] frame] ; 
     NSWindow* uiWindow   = [[NSWindow alloc] initWithContentRect:windowRect 
        styleMask:NSBorderlessWindowMask 
        backing:NSBackingStoreBuffered defer:YES]; 
     [uiWindow setBackgroundColor: [NSColor redColor/*clearColor*/]]; 
     [uiWindow setOpaque:NO]; 

     NSView* uiView = [[[NSView alloc] initWithFrame:NSMakeRect(0, 0, windowRect.size.width, windowRect.size.height)] autorelease]; 
     [uiView translateOriginToPoint:NSMakePoint(100, uiView.bounds.size.height/2)]; 
     uiView.wantsLayer = YES; 

     [uiWindow setContentView:uiView]; 

     NSTextField *textField; 
     textField = [[NSTextField alloc] initWithFrame:NSMakeRect(0, 0, 800, 80)]; 
     [textField setFont:[NSFont fontWithName:@"Helvetica Bold" size:60]]; 
     [textField setStringValue:@"My Label"]; 
     [textField setBezeled:YES]; 
     [textField setDrawsBackground:YES]; 
     [textField setEditable:YES]; 
     [textField setSelectable:YES]; 
     [textField setEnabled:YES]; 

     [uiView addSubview:textField]; 


// THIS DOES NOT WORK 
[self.window addChildWindow:uiWindow ordered:NSWindowAbove]; 

// THIS WORKS 
//[_graphicView addSubview:uiView]; 
+0

मुझे अभी पता चला है कि यह विंडो शैली मास्क NSBorderlessWindowMask के कारण होता है। अगर मैं NSTitledWindowMask का उपयोग करता हूं तो यह ठीक है। क्या सीमा-रहित विंडो के लिए कीबोर्ड सक्षम करने का कोई तरीका है? –

उत्तर

10

आप अपने कस्टम खिड़की कुंजी खिड़की बनने के लिए अनुमति देने के लिए की जरूरत है। डिफ़ॉल्ट रूप से, सीमाहीन खिड़कियां कुंजी नहीं बन सकती हैं।

- (BOOL)canBecomeKeyWindow 
{ 
    return YES; 
} 



आप देख सकते हैं अपने सीमारहित खिड़की इस के साथ कुंजी खिड़की है:

if([uiWindow isKeyWindow] == TRUE) { 
    NSLog(@"isKeyWindow!"); 
} 
else { 
    NSLog(@"It's not KeyWindow!"); 
} 



इसके अलावा अपने NSWindow उपवर्ग में, विधि canBecomeKeyWindow: जोड़ने , एक सीमाहीन खिड़की के लिए महत्वपूर्ण घटनाओं, क्लास स्वीकार करने के लिए एस acceptFirstResponder लागू करना चाहिए और YES वापस करना चाहिए।

+0

यह मेरे लिए काम करता है। – Mrug

1

यदि आप अपनी शैली बदल सकते हैं मास्क: NSBorderlessWindowMask शैली में: NSTitledWindowMask, उपरोक्त कोड काम करेगा। हालांकि मैंने NSBorderlessWindow को संपादन योग्य टेक्स्टफिल्ड्स जोड़ने का भी प्रयास किया है, लेकिन ऐसा लगता है कि यह मेरे लिए भी काम नहीं करता है।

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