2012-02-27 38 views
7

Hi tất cả mọi người,NSTextField không thể chỉnh sửa trong tùy chỉnh NSWindow

Nếu tôi tạo NSTextField theo quan điểm điều khiển của tôi thì tất cả là tốt - lĩnh vực này là có thể chỉnh sửa. Thật không may, tôi phải tạo NSTextField trong tùy chỉnh mới NSWindow. Mã của tôi dưới đây tạo ra một trường trông giống như không có tiêu điểm (lựa chọn văn bản có màu xám) và không thể chỉnh sửa (không có con trỏ và không có phản ứng đối với các nét chính). Tôi có thể thay đổi lựa chọn văn bản bằng chuột nhưng đó là tất cả.

Tôi có phải bật NSWindow để nhận các nét chính không?

Đánh giá cao sự giúp đỡ của bạn, --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

Tôi chỉ thấy rằng nó được gây ra bởi kiểu cửa sổMask NSBorderlessWindowMask. Nếu tôi sử dụng NSTitledWindowMask thì tốt thôi. Có cách nào để kích hoạt bàn phím cho cửa sổ không viền? –

Trả lời

10

Bạn cần phải cho phép cửa sổ tùy chỉnh của bạn để trở thành cửa sổ chính. Theo mặc định, các cửa sổ không viền không thể trở thành khóa. Trong NSWindow lớp con của bạn, thêm các phương pháp canBecomeKeyWindow::

- (BOOL)canBecomeKeyWindow 
{ 
    return YES; 
} 



Bạn có thể kiểm tra nếu cửa sổ không biên giới của bạn là cửa sổ quan trọng với điều này:

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



Bên cạnh đó , cho một cửa sổ không viền để chấp nhận các sự kiện quan trọng, s nên triển khai acceptFirstResponder và trả lại YES.

+0

Nó phù hợp với tôi. – Mrug

1

Nếu bạn chỉ có thể thay đổi styleMask của mình: NSBorderlessWindowMask thành kiểu: NSTitledWindowMask, Mã trên sẽ hoạt động. Tuy nhiên tôi cũng đã thử thêm TextFields có thể chỉnh sửa để NSBorderlessWindow, nhưng nó không có vẻ làm việc cho tôi hoặc.

Các vấn đề liên quan