gpt4 book ai didi

objective-c - 放置 NSTextField 绘图代码的正确位置?

转载 作者:行者123 更新时间:2023-12-03 17:56:04 26 4
gpt4 key购买 nike

我正在致力于创建一些自定义 Cocoa 组件。目前我正在尝试弄清楚如何绘制自定义 NSTextFields。

我已经重写了子类上的drawRect方法,但是当我开始打字时,我得到一个像这样的双矩形/image/5FSYA.jpg .

这是我的drawRect方法

- (void)drawRect:(NSRect)dirtyRect
{
[NSGraphicsContext saveGraphicsState];
[[NSBezierPath bezierPathWithRoundedRect:dirtyRect xRadius:5.0f yRadius:5.0f] setClip];
[[NSColor grayColor] setFill];
NSRectFillUsingOperation(dirtyRect, NSCompositeSourceOver);
[NSGraphicsContext restoreGraphicsState];

[NSGraphicsContext saveGraphicsState];
NSRect rect = NSInsetRect(dirtyRect, 1.0f, 1.0f);
[[NSBezierPath bezierPathWithRoundedRect:rect xRadius:5.0f yRadius:5.0f] setClip];
[[NSColor whiteColor] setFill];
NSRectFillUsingOperation(rect, NSCompositeSourceOver);
[NSGraphicsContext restoreGraphicsState];
}

更新:

我将绘图代码移动到 NSTextFieldCell 子类中

- (void)drawWithFrame:(NSRect)frame inView:(NSView *)controlView {
[NSGraphicsContext saveGraphicsState];
[[NSBezierPath bezierPathWithRoundedRect:frame xRadius:5.0f yRadius:5.0f] setClip];
[[NSColor grayColor] setFill];
NSRectFillUsingOperation(frame, NSCompositeSourceOver);
[NSGraphicsContext restoreGraphicsState];

[NSGraphicsContext saveGraphicsState];
[[NSBezierPath bezierPathWithRoundedRect:NSInsetRect(frame, 1.0f, 1.0f) xRadius:3.0f yRadius:3.0f] setClip];
[[NSColor whiteColor] setFill];
NSRectFillUsingOperation(frame, NSCompositeSourceOver);
[NSGraphicsContext restoreGraphicsState];
}

但是一旦你完成编辑,它就会覆盖文本,即使光标仍然在那里?有什么建议么?我已经尝试绘制标题,但它仍然发生。

感谢您的帮助。

答案:

NSCell Custom Highlight

通过调用 super drawInteriorWithFrame:inView 我能够阻止奇怪的文本消失问题。

最佳答案

在我看来,您最终是在父类(super class) (NSTextField's) drawRect: 实现的绘图中进行了绘制。您还没有调用 super 但它仍然能够自行绘制。我自己也不知道为什么,但是一些 NSControl,例如文本字段和按钮,当子类化时,无论您是否对它们调用 drawRect: ,都会绘制自己。例如,如果您对普通 NSButton 进行子类化,实现 drawRect: 并且不调用 super,那么它无论如何都会绘制按钮。可能会超过你画的任何东西,这在过去引起了困惑。最简单的解决方案是不要子类化 NSTextField,并查看是否有另一个类可以子类化(例如评论中提到的 NSTextFieldCell)。

关于objective-c - 放置 NSTextField 绘图代码的正确位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13235866/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com