我正在试图弄清楚如何像屏幕截图上那样自定义NSTextField。任何人都可以指向我至少指导或正确的方向吗?我的意思是我明白你可以画出背景和方框,但你如何告诉方框它接受文字和它应该是什么尺寸等?
非常感谢任何帮助。
答案 0 :(得分:0)
老实说,我只看到两种方法:子类化NSTextField并根据您的需要进行调整,但是您将面临很多限制,或者创建一个看起来像NSTextfield的类。
在第二个选项中,您可以绘制背景,边框,标签,图标和光标。此外,您可以为光标设置动画,根据文本字段的状态更改颜色和字体。这是很多工作要做,可能已经有一个很酷的图书馆正在寻找你想要的东西。
在这两种情况下,您都需要管理键盘以使用您想要的键盘(我的意思是用于填写电子邮件地址的电子邮件键盘)。
答案 1 :(得分:0)
由于实际文本似乎与边框重叠,因此一种方法是使用自定义视图类绘制边框并在其中放置NSTextView以执行文本输入。只需将NSTextView设置为无边框,并将背景颜色与视图匹配即可。
如果只是需要偶尔输入并且您想要一个轻量级控件,您甚至可以考虑为文本使用标签,或者只是让NSString对象使用-drawInRext:withAttribures:
绘制自己并抓取共享的NSTextField并放置它在顶部进行编辑。这就是NSTableView实例编辑的方法。
我已经实现了类似的选项卡控件,我支持通过双击编辑标题(如excel选项卡)。以下是一些如何将共享文本编辑器作为灵感的代码。然后,您需要通过委托方法管理编辑过程。
-(BOOL)beginEditLabelInteractiveForTab:(NSInteger)index {
if (![self.window makeFirstResponder:self.window]) { // Try to make window first responder to ensure the shared field editor is available.
return NO;
};
NSTextView *tv = (NSTextView *)[self.window fieldEditor:YES forObject:nil]; // take the shared field editor and configure it
if (!tv) { // Did not get the field editor
return NO;
}
// Set font and location
[tv setVerticallyResizable:NO];
[tv setFont:self.textFont];
[tv setBackgroundColor:self.selectedFieldColor];
[tv setTextColor:self.editingColor];
[tv setEditable:YES];
editedTab = [self.tabs objectAtIndex:index];
tv.string = editedTab.label; // Set text
CGFloat w = editedTab.coreWidth + BSTeditorExtraPadding; // Slightly larger to fit the cursor
CGFloat h = (self.tabHeight < (self.preferredTextHeight-(2 * BSTstdYTextOffset))) ? (self.tabHeight-(2 * BSTstdYTextOffset)) : self.preferredTextHeight; // Text height or tab ht - 4 whichever is less
[tv setFrameSize:NSMakeSize(w,h)];
// x poistion is set in owner draw method to match location of tab
tv.textContainer.lineFragmentPadding = 0; // remove padding for alignment with text below
tv.delegate = self;
[self addSubview:tv];
[self.window makeFirstResponder:tv];
self.labelEditor = tv; // Store a reference also used as a flag
return YES;
}