Как сравнить область отслеживания NSEvent, чтобы увидеть, какая область отслеживания вызвала "событие"

Итак, у меня есть это событие mouseEntered, которое сделает видимой метку, если я введу мышь для trackingArea. Но, в зависимости от того, какое отслеживание области было введено, я хочу установить собственную строку для метки.

Основной вопрос: как мне узнать, какая область отслеживания была введена.

Это мой код:

-(void)mouseEntered:(NSEvent *)theEvent
{
   if([theEvent trackingArea] isEqual: -- to my trackingArea --)
   {
       [self.label setStringValue:@"Test"];
   }
}

1 ответ

Звучит как начало кода спагетти для меня..

То есть: проверка в одном представлении, было ли что-то вызвано другим представлением - я полагаю, вы пытаетесь внедрить какую-то систему интерактивной справки с некоторым текстом, который будет отображаться для различных представлений / элементов управления. В этом случае вы можете легко получить огромный блок if-then-else и десятки просмотров для проверки.

В любом случае я бы предложил использовать другой подход и использовать слабую связь в вашем коде:

Как насчет того, чтобы представление, которому действительно принадлежит область отслеживания, отправляло уведомление со строкой, которую оно хочет, чтобы кто-то еще отображал?

Таким образом, представления не должны знать друг друга, никаких переменных экземпляра для настройки, указывающих друг на друга, и т. Д. - просто уведомление, которое кто-то отправляет, а кто-то другой будет слушать.

Чистый, ремонтопригодный, легко расширяемый.

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