0

我完全被这个问题难住了。我制作了一个使用几个不同类的自定义搜索控件。出于某种原因,当 NSTextField 位于这些不同部分的任何位置时,它会在其周围显示一个纯黑色边框,并且光标不会闪烁。

如果有人有几分钟的时间 - 我已经把我的代码放在了 pastebin 上。

这是搜索控件的图片,以及在这种特殊情况下的外观:

http://imgur.com/6y8qx.png

搜索控件位于渐变视图的顶部:http:
//pastebin.com/m43fde2b6

搜索控件与此代码拼凑在一起:http:
//pastebin.com/m5be08c32

搜索控件的实际图形部分由两个类构建:http:
//pastebin.com/m5bfa9439
http://pastebin.com/m5e909a2f(扩展上述类)

我找不到到底出了什么问题。文本有效,但有黑色边框,光标不闪烁。我究竟做错了什么?

Arg,我已经为这个头发拔了好几天了。

4

2 回答 2

1

Mac OS X 从未很好地支持将一个视图置于同级视图之上。尝试将其设置为子视图。您甚至可能希望将其设为专用搜索字段视图的私有组件。

关于这一点,您不使用 NSSearchField 是否有原因?

于 2009-09-26T03:53:42.253 回答
0

我想通了!最后。

我没有意识到“drawRect:”方法的参数“dirtyRect”是控件的“脏”部分,这意味着它需要重绘。

因此,当 NSTextField 位于控件之上时,它将触发该控件的“drawRect:”被调用 (3) 不同的时间 - 使用不同的“dirtyRect”参数。

1:光标 - 通常是一个 NSMakeRect(textField.origin.x,textfield.origin.y,1,textfield.origin.height)。2:文本字段框架 3:文本字段所在控件的大小。

所以,修复很简单,将我的控件的比例 9 绘图更改为始终绘制到 [self frame]。您可以在此处查看更改:http: //pastebin.com/m50a5b0ad(第 89 行)。

以前,它绘制到“rect”参数(http://pastebin.com/m5e909a2f - 第 88 行),但根据 drawRect 调用的来源,rect 参数的大小不同。

于 2009-09-27T19:01:25.783 回答