moo*_*ots 25 macos customization cocoa objective-c nstextfield
我设置了一个NSTextField文本颜色为白色,背景颜色为(黑色尽管没有渲染背景颜色,所以它是透明的).全部在Interface Builder中.
我遇到的问题是光标是黑色的,几乎看不到.光标不代表文字颜色吗?我有什么想法可以解决这个问题?
否则,NSTextField看起来无法编辑.
uli*_*ess 31
实际上,由-currentEditor为NSTextField返回的NSText*始终是NSTextView*,我将以下代码添加到我的自定义NSTextField子类中:
-(BOOL) becomeFirstResponder
{
BOOL success = [super becomeFirstResponder];
if( success )
{
// Strictly spoken, NSText (which currentEditor returns) doesn't
// implement setInsertionPointColor:, but it's an NSTextView in practice.
// But let's be paranoid, better show an invisible black-on-black cursor
// than crash.
NSTextView* textField = (NSTextView*) [self currentEditor];
if( [textField respondsToSelector: @selector(setInsertionPointColor:)] )
[textField setInsertionPointColor: [NSColor whiteColor]];
}
return success;
}
Run Code Online (Sandbox Code Playgroud)
因此,如果您已经在替换此类,因为您正在进行自定义背景绘制,那么这可能是一个更加封装的解决方案.也许甚至还有一种方法可以将其转移到NSCell中,因为NSCell是进行绘图并且无论如何都知道颜色的人.
Zel*_*lko 28
NSTextField *textField = self.textField;
NSColor *insertionPointColor = [NSColor blueColor];
NSTextView *fieldEditor = (NSTextView*)[textField.window fieldEditor:YES
forObject:textField];
fieldEditor.insertionPointColor = insertionPointColor;
Run Code Online (Sandbox Code Playgroud)
Rob*_*arl 18
你最好的选择可能是使用NSTextView和- (void)setInsertionPointColor:(NSColor *)color.
Jon*_*etz 14
假设您想要设置插入插入符号而不是鼠标光标的颜色,那么使用的建议setInsertionPointColor:应该起作用.
但是,您不一定需要从使用更改NSTextField为NSTextView.窗口的字段编辑器NSTextField是一个NSTextView.因此,当您NSTextField成为关键视图时,您可以抓住字段编辑器并调用setInsertionPointColor:它.当字段停止为关键视图时,您可能需要重置颜色.
您可以使用NSWindow's fieldEditor:forObject:或NSCell's 来获取字段编辑器fieldEditorForView:.
如果您有NSTextField的子类,则可以使用NSTextFieldCell的自定义子类并覆盖它-(NSText*)setUpFieldEditorAttributes:(NSText*)textObj.在该方法中,您可以设置一次插入点颜色,并且在该文本字段的字段编辑器处于活动状态时它将保留.虽然当字段编辑器移动到另一个编辑字段时,插入点颜色将保留,除非您重置它.
我打insertionPointColor了电话viewDidLoad,应用程序崩溃了。
我通过调用解决了这个insertionPointColor问题viewDidAppear。
对于Swift开发人员:
将插入点颜色方法设置为扩展:
extension NSTextField {
public func customizeCursorColor(_ cursorColor: NSColor) {
let fieldEditor = self.window?.fieldEditor(true, for: self) as! NSTextView
fieldEditor.insertionPointColor = cursorColor
}
}
Run Code Online (Sandbox Code Playgroud)
并打电话
override func viewDidAppear() {
super.viewDidAppear()
textField.customizeCursorColor(NSColor.red)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9951 次 |
| 最近记录: |