NSTextField поверх пользовательского чертежа - черный контур и курсор не мигают?

Я полностью озадачен этой проблемой. Я сделал пользовательский элемент управления поиском, который использует несколько разных классов. По какой-то причине, когда 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 ответа

Помещение одного представления на одноуровневое представление никогда не было хорошо поддержано в Mac OS X. Попробуйте вместо этого сделать его подпредставлением. Возможно, вы даже захотите сделать его частным компонентом отдельного представления поля поиска.

На этой ноте, есть ли причина, по которой вы не используете NSSearchField?

Я понял это! В заключение.

Что я не понял, так это параметр метода 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 имел разные размеры.

Другие вопросы по тегам