Как заставить NSControl (например, NSTokenField) игнорировать события мыши - PullRequest
1 голос
/ 26 марта 2012

В частности, я бы хотел, чтобы NSTokenField игнорировал события мыши, потому что я использую его в NSTableCellView просто для отображения данных в виде токенов, без какого-либо редактирования.

Установка поля токена enabled = NO работает, за исключением того, что он выделяет токены и затрудняет чтение текста.

Установка поля токена editable = NO очень близка к тому, что я хочу - он предотвращает редактирование, сохраняя внешний вид поля токена, за исключением того, что, когда я наводю курсор мыши на токены, они загораются. Если бы я мог просто предотвратить это, я бы занимался бизнесом.

Я подозреваю, что мне нужно что-то создать подкласс и переопределить некоторые NSResponder методы, но не совсем уверен, что делать. Я попытался создать подкласс NSTokenField и переопределить mouseEntered: и mouseMoved:, чтобы ничего не делать, но это тоже не сработало.

1 Ответ

2 голосов
/ 26 марта 2012

Попробовав много вещей, я наконец-то заставил это работать, основываясь на предложении Юлия Цезаря.

Хитрость заключалась в том, чтобы подкласс NSTextField и переопределить trackingAreas:

- (NSArray *)trackingAreas
{
    return [NSArray array];
}

Простого удаления областей отслеживания поля при его создании было недостаточно, поскольку поле находилось в виде прокрутки, и иногда области отслеживания создавались заново.

...