我不确定这是否可能。
所以我有一个自定义单元格 - 里面包含一个自定义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。
感谢。
答案 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;崩溃。