如果我在控制器的视图中创建NSTextFIEld,那么一切都很好 – 该字段是可编辑的.
不幸的是,我必须在新的自定义NSWindow中创建NSTextFIEld.我的代码产生一个看起来没有焦点的字段(文本选择是灰色的)并且不可编辑(没有光标,也没有对键击的反应).我可以用鼠标更改文本选择,但这就是全部.
我是否必须让NSWindow接收击键?
感谢您的帮助,
–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,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,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];解决方法 您需要允许自定义窗口成为关键窗口.默认情况下,无边框窗口不能成为密钥.在NSWindow子类中,添加方法canBecomeKeyWindow ::
- (BOol)canBecomeKeyWindow{ return YES;}
你可以检查你的无边框窗口是否是关键窗口:
if([uiWindow isKeyWindow] == TRUE) { NSLog(@"isKeyWindow!");}else { NSLog(@"It's not KeyWindow!");}
此外,对于接受键事件的无边界窗口,该类应实现acceptFirstResponder并返回YES.
总结以上是内存溢出为你收集整理的objective-c – NSTextField在自定义NSWindow中不可编辑全部内容,希望文章能够帮你解决objective-c – NSTextField在自定义NSWindow中不可编辑所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)