gpt4 book ai didi

cocoa - NSTextView 的自定义插入点

转载 作者:行者123 更新时间:2023-12-03 16:06:32 26 4
gpt4 key购买 nike

我通过覆盖 -(void)drawInsertionPointInRect:(NSRect)aRect color:(NSColor *)aColor returnedOn:(BOOL)flag 来更改插入点大小,但它不处理第一次闪烁(当您移动插入点时,它会恢复正常)

我设法通过重写私有(private)方法- (void)_drawInsertionPointInRect:(NSRect)aRect color:(NSColor *)aColor来处理第一次闪烁。

但这对我来说不是一个解决方案,因为覆盖私有(private)方法将导致被 App Store 拒绝。我希望该应用程序出现在 App Store 中。我看到像 iAWriter 和 Writeroom 这样的应用程序有一个自定义插入点,并且它们在应用程序商店中。

有谁知道他们是如何做到这一点的,或者有更好的方法而不是重写私有(private)方法?

谢谢。

- (void)_drawInsertionPointInRect:(NSRect)aRect color:(NSColor *)aColor
{
aRect.size.width = 3.0;
[aColor set];
[NSBezierPath fillRect:aRect];
}

- (void)drawInsertionPointInRect:(NSRect)aRect color:(NSColor *)aColor turnedOn:(BOOL)flag
{
if(flag) {
aRect.size.width = 3.0;
[aColor set];
[NSBezierPath fillRect:aRect];
}
else {
[self setNeedsDisplayInRect:[self visibleRect] avoidAdditionalLayout:NO];
}
}

最佳答案

问题是调用drawInsertionPointInRect时生效的剪切路径。

- (void)drawInsertionPointInRect:(NSRect)rect color:(NSColor *)color turnedOn:(BOOL)flag {
rect.size.width = 8.0;
NSBezierPath * path = [NSBezierPath bezierPathWithRect:rect];
[path setClip]; // recklessly set the clipping area (testing only!)
[path fill];
}

请注意,上面的代码会留下痕迹(在我的测试中,不会调用drawInsertionPointInRect来清除插入点,只是绘制它)。使用 setDrawsBackground:YES 是一种快速但肮脏的方法来清除工件。

关于cocoa - NSTextView 的自定义插入点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15647874/

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