我想在UIView
中绘制图表。问题是我如何获取视图的数据(点)。如果我创建一个协议并将UIViewController
设置为UIView
中的委托,我调用委托方法(initWithFrame
?)可能是早期的,并且可能没有设置委托, awakeFromNib
?但视图是100%在代码中创建的,它没有nib文件)..
答案 0 :(得分:3)
initWithFrame?可能是早到,代表可能没有设置。
事实上,当你在initWithFrame:
时,代表不能设置,因为你在分配后对对象做的第一件事就是初始化,i。即直到init方法返回,你不能调用(好吧,至少在其他任何方法都不要这样做)。
您需要做的是使用loadData
或reloadData
方法,委托必须在将自己设置为视图的委托后明确调用。例如,从视图控制器中,您可以这样称呼它:
@implementation ChartViewController
- (id)init
{
if ((self = [super init])) {
chartView = [[ChartView alloc] initWithFrame:self.view.frame];
chartView.delegate = self;
[self.view addSubview:chartView];
[chartView reloadData];
}
return self;
}
然后,在图表图纸视图中,按如下方式实施- reloadData
:
- (void)reloadData
{
// Call the delegate here,
// then do the drawing
}
答案 1 :(得分:0)
制定协议,但不要将其称为委托。称之为dataSource:D
无论如何,当你第一次需要数据时调用它......尽可能晚..不要在init ..也许在setDataSource调用中。
或第一次画画时看到你没有数据..
查看UITableView以了解他是如何做到的并模仿
答案 2 :(得分:0)
更好的方法是使用UIViewController
代替UIView
。因为您的视图必须管理数据。管理数据是UIViewController的工作。