Проблема с добавлением множества подсказок в представление - PullRequest
2 голосов
/ 20 мая 2011

У моего приложения Какао есть представление с примерно пятидесяти цветными прямоугольниками, которые представляют тепловую карту некоторых данных.Я не могу понять, как добавить подсказки к каждому из прямоугольников, показывающих информацию о данных, которые представляет этот прямоугольник.Я просмотрел документацию разработчика для NSView и добавил следующий код:

- (NSString *)view:(NSView *)view stringForToolTip:(NSToolTipTag)tag point:(NSPoint)point userData:(void *)data
{

    // use the tags to determine which rectangle is under the mouse
    if (tag == blueTag) {
        return NSLocalizedString(@"The Blue rectangle", @"");
    }
    if (tag == redTag) {
        return NSLocalizedString(@"The Blue rectangle", @"");    
    }
    // we should never get to here!
    return NSLocalizedString(@"Unknown tooltip area", @"");
}

// add tooltips for the rectangles (in my  drawRect method 
// after the rects have been initialized etc.)
[self removeAllToolTips];
redTag = [self addToolTipRect:startingRect owner:self userData:NULL];
blueTag = [self addToolTipRect:blueRect owner:self userData:NULL];

Я сталкиваюсь с двумя проблемами:
1) при печати тега длявсплывающие подсказки, они оба показывают 1 в качестве тега, даже если они для двух разных прямоугольников.
2) метод stringForToolTip никогда не вызывается

Любая помощь / предложения будут хороши.Спасибо!

1 Ответ

2 голосов
/ 21 мая 2011

Я думаю, что основная проблема заключается в том, что вы добавляете подсказки к подсказкам в -drawRect:. Вам нужно обновлять текты всплывающей подсказки только при изменении размера представления, а не при каждом его рисовании. Вместо этого, добавьте метод для настройки ссылок всплывающей подсказки, а затем вызовите его из метода -init вашего представления.

Затем вы можете переопределить -setFrame: и вызвать метод настройки всплывающей подсказки после вызова [super setFrame:newFrame].

Я должен отметить, что в вашем коде оба прямоугольника будут выводить The Blue rectangle, потому что строки журнала одинаковы ...

...