Shinobi Charts(iOS):子类化SChartCrosshairMultiValueTooltip - 如何使用'labels'属性?

时间:2013-10-31 10:32:33

标签: ios shinobi

所以我将SChartCrosshairMultiValueTooltip子类化为实现自定义多值(OHLC)工具提示。我可以从图表中获取OHLC数据。但是我很难理解如何以Shinobi框架打算让我的方式呈现数据。

具体来说,我不明白如何使用labels属性。我首先假设它会预先填充由调用keyValueDisplayPairsForDataPoint:onSeries:withXAxis:withYAxis:的超类生成的标签,但这不正确,因为调试器显示标签数组为空。

所以我尝试调用该方法并在我重写的labels方法中手动将UILabel添加到- (void)setDataPoint:(id<SChartData>)dataPoint fromSeries:(SChartSeries *)series fromChart:(ShinobiChart *)chart数组,但没有显示任何内容。所以我尝试将它们作为子视图添加到self.view中。这是有效的,但是因为我自己添加了它们,所以根据工具提示没有设置它们,无论如何只是感觉不对,因为如果我必须自己完成所有事情,几乎没有点子类化。我还必须确保[self layoutContents]没有被要求使其工作,这感觉是双重错误。

如上所述工作的代码如下所示: -

- (void)setDataPoint:(id<SChartData>)dataPoint fromSeries:(SChartSeries *)series fromChart:(ShinobiChart *)chart
{
    SChartMultiYDataPoint *dp = (SChartMultiYDataPoint *)dataPoint;
    NSDictionary *dict = [self keyValueDisplayPairsForDataPoint:dp onSeries:series withXAxis:chart.xAxis withYAxis:chart.yAxis];

    for (UILabel *label in self.labels)
    {
        [label removeFromSuperview];
    }
    [self.labels removeAllObjects];

    CGFloat y = 0;
    const CGFloat kHeight = 25.0f;
    for (id key in [dict allKeys])
    {
        UILabel *keyLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, y, 80, kHeight)];
        keyLabel.text = key;
        UILabel *valueLabel = [[UILabel alloc] initWithFrame:CGRectMake(80, y, 80, kHeight)];
        valueLabel.text = dict[key];
        [self.labels addObject:keyLabel];
        [self.labels addObject:valueLabel];
        y += kHeight;
        [self addSubview:keyLabel];
        [self addSubview:valueLabel];
    }
}

- (void)setPosition:(struct SChartPoint)pos onCanvas:(SChartCanvas *)canvas
{
//    [self layoutContents];   // do NOT call this
    self.frame = CGRectMake(0, 0, 160, 100);
}

有没有人知道更好的方法?

0 个答案:

没有答案