我能够通过创建自定义字段编辑器(通过子类化NSTextVIEw)并从窗口委托中返回它来完成此 *** 作,如下所示:
- (ID) windowWillReturnFIEldEditor:(NSWindow *) aWindow toObject:(ID) anObject { if ([anObject isEqual:myCustomtable]) { if (!myCustomFIEldEditor) { myCustomFIEldEditor = [[MyNSTextVIEwSubclass alloc] init]; [myCustomFIEldEditor settable:anObject]; } return myCustomFIEldEditor; } else { return nil; }}
在MyNSTextVIEwSubclass中,我重写moveUp:,moveDown:,moveleft:和moveRight:方法来实现我想要的功能,并且一切正常.唯一的问题是字段编辑器不再像文本字段单元格编辑器那样.例如,当我按Enter键时,它会在文本字段中插入换行符,而不是结束编辑.
如何创建一个自定义字段编辑器,其响应方式与NSTextFIEldCell的默认响应完全相同(除了我将覆盖的那四个函数)?或者有更好的方法来改变moveUp:,moveleft:和moveRight的功能:?
编辑:当选择进行编辑时,字段编辑器似乎将文本字段设置为其委托.在这种情况下,附加到控件可能会有所帮助:textVIEw:doCommandBySelector:委托方法,如here所述,但是当我在我的NSTextFIEldCell子类或我的NStableVIEw子类中实现该函数时,它永远不会被调用.为什么不?
解决方法 我几乎整天都在研究这个问题,但我终于明白了.为了能够使用箭头键遍历我的NStableVIEw子类,我必须将以下方法添加到我的NStableVIEw:- (BOol)textVIEw:(NSTextVIEw *)aTextVIEw doCommandBySelector:(SEL)aSelector { if(aSelector == @selector(moveUp:)) { [self moveSelectiontoprevIoUsRow]; return YES; } else if(aSelector == @selector(moveDown:)) { [self moveSelectionToNextRow]; return YES; } else if(aSelector == @selector(moveleft:)) { [self moveSelectiontoprevIoUsColumn]; return YES; } else if(aSelector == @selector(moveRight:)) { [self moveSelectionToNextColumn]; return YES; } return NO;}
这是因为默认字段编辑器是NSTextVIEw(不是NSControl)所以我需要使用< NSTextVIEwDelegate>协议.设置为其委托的视图是NStableVIEw,而不是NSTextFIEldCell. moveSelectionTo …函数是我的NStableVIEw子类中定义的自定义函数,它跟踪当前编辑的单元格,然后相应地移动它.
总结以上是内存溢出为你收集整理的objective-c – NSTableView中NSTextFieldCell的自定义字段编辑器全部内容,希望文章能够帮你解决objective-c – NSTableView中NSTextFieldCell的自定义字段编辑器所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)