NSTextField在自定义绘图之上 - 黑色轮廓和光标不闪烁?

时间:2009-09-26 03:48:27

标签: cocoa nstextfield nstextfieldcell

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

如果有人有几分钟 - 我已将我的代码放在pastebin上。

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

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

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

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

搜索控件的实际图形部分由两个类构成:
http://pastebin.com/m5bfa9439
http://pastebin.com/m5e909a2f(在课堂上方延伸)

我找不到什么是错的。文字有效,但有黑色边框,光标不闪烁。我做错了什么?

Arg,我已经把头发拉了好几天了。

2 个答案:

答案 0 :(得分:1)

将一个视图放在兄弟视图上从未在Mac OS X中得到很好的支持。请尝试将其作为子视图。您甚至可能希望将其作为专用搜索字段视图的私有组件。

就此而言,您是否有理由不使用NSSearchField?

答案 1 :(得分:0)

我明白了!最后。

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

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

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

所以,修复很简单,改变我的控件的比例9绘图总是绘制到[自我框架]。您可以在此处查看更改:http://pastebin.com/m50a5b0ad(第89行)。

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