0

我有一个用于显示计时器的 NSTextView。此计时器每秒更新一次,倒计时至 00:00。当计时器更新 NSTextView 的字符串时,NSTextView 就像重绘一样,但使用其父视图背景作为自己的背景。

我的 NSTextView 具有清晰的背景颜色,并且已设置为不绘制其背景。它的父视图为它自己的背景绘制了一个 3 部分的图像。下面是 NSTextView 的代码。

_timerLabel = [[NSTextView alloc] init];
[self.timerLabel setSelectable:NO];
[self.timerLabel setEditable:NO];
self.timerLabel.font = fontLoaded ? [NSFont fontWithName:@"DS-Digital" size:26.0f] : [NSFont fontWithName:@"Lucida Grande" size:26.0f];
self.timerLabel.textColor = [NSColor colorWithCalibratedRed:(50.0f/255.0f) green:(50.0f/255.0f) blue:(50.0f/255.0f) alpha:1.0f];
self.timerLabel.backgroundColor = [NSColor clearColor];
[self.timerLabel setDrawsBackground:NO];
[self.timerLabel setAllowsDocumentBackgroundColorChange:NO];
[self.timerLabel setAlignment:NSCenterTextAlignment];
self.timerLabel.string = @"5:11";
[self addSubview:self.timerLabel];

任何想法为什么会发生这种情况?我已经尝试了所有我能想到或在苹果文档中找到的东西,但没有任何东西可以解决我的问题。任何帮助将不胜感激。

在更新 NSTextView 中的文本之前 https://www.dropbox.com/s/za3twd8hb7r1apr/Screen%20Shot%202013-04-10%20at%205.37.10%20PM.png

更新 NSTextView 中的文本后 https://www.dropbox.com/s/p0bsk63o8yweyqs/Screen%20Shot%202013-04-10%20at%205.37.28%20PM.png

4

1 回答 1

0

我弄清楚发生了什么,并认为我会分享以防其他人遇到同样的问题。

更新 NSTextView 的文本(也可以是 NSTextField)时,drawRect 函数会被调用,并使用更新的 NSTextView 的矩形。

在我的例子中,我的 draw rect 为我的 NSView 的背景绘制了一个 3 部分的图像到 drawRect 函数中提供的 rect。由于矩形是 NSTextView 之后的矩形并更新为其字符串,因此这将根据 NSTextView 的大小重绘我的背景图像。

目前我能想出的唯一解决方案是始终为我的 NSView 的边界绘制我的 3 部分图像。

希望从那以后。

于 2013-04-11T13:20:32.640 回答