在uitableview单元格中设置自定义视图的委托

时间:2014-07-05 20:18:53

标签: ios objective-c uitableview uiview delegates

我不确定这是否可能。

所以我有一个自定义单元格 - 里面包含一个自定义uiview。这个UIView是一个显示条形图的视图。所以我想设置dataSource,以及该UIView的委托。

如果我使用该代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

    static NSString *simpleTableIdentifier = @"StatsCell";

    StatsTableViewCell  *cell = (StatsTableViewCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
    if (cell == nil)
    {
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"StatsTableViewCell" owner:self options:nil];
        cell = [nib objectAtIndex:0];
    }



    cell.barChart.dataSource = self ;
    dell.barChart.delegate = self;
}

我收到警告:

 Assigning to 'id<JBBarChartViewDelegate>' from incompatible type 'StatsViewController *const __strong'

我该怎么做?然后,如果可能的话 - 因为将为任何单元调用该委托方法 - 我如何区分它们中的哪一个被调用?

我正在使用here中的JBChartView。

感谢。

1 个答案:

答案 0 :(得分:1)

JBBarChartView的{​​{1}}属性属于delegate类型。为了在不获取此警告的情况下将对象设置为委托,您必须将该类定义为符合id<JBBarChartViewDelegate>协议:

JBBarChartViewDelegate

执行此操作后,您将看到您的课程尚未实施的任何@interface YourClass <JBBarChartViewDelegate> 协议方法的警告(如果有)。您需要实施这些方法。

正如@Lukasz&#39; Severiaan&#39; Grela建议的那样,将单元格作为委托/数据源而不是tableview可能更有意义。


您也可以通过强制转换对象来消除警告:

@required

但我强烈反对这一点。如果cell.barChart.delegate = (id<JBBarChartViewDelegate>)self; 未被定义为符合协议,则您不会收到有关丢失{的警告{1}}协议方法,因此,您可能会得到一个未知的选择器&#34;崩溃。