2009-09-26 34 views
0

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

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

这里的搜索控制的图片,它看起来像在这种特殊情况下:

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

搜索控制坐拥梯度视图的顶部:
http://pastebin.com/m43fde2b6

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

搜索控制的实际图形部分由两类内置:
http://pastebin.com/m5bfa9439
http://pastebin.com/m5e909a2f(扩展上面的类)

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

精氨酸,我一直拉我的头发在这一天的日子。

回答

1

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

在那个笔记上,是否有一个原因,你不使用NSSearchField?

+0

我没有使用NSSearchControl,因为我有自定义图形。 NSSSearchControl与黑色边框做同样的事情,不更新游标。 使搜索字段成为子视图也不会这样做。 – gngrwzrd 2009-09-27 18:17:36

0

我明白了!最后。

我没有意识到的是“drawRect:”方法的参数“dirtyRect”,是控件的“脏”部分,这意味着它需要重绘。因此,当一个NSTextField位于控件之上时,它将触发该控件的“drawRect:”以不同的时间被不同的“dirtyRect”参数调用(3)。

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参数的大小不同。