我想在 UIView
中绘制图表。问题是如何将数据(点)获取到 View 。如果我创建一个协议(protocol)并将 UIViewController
设置为委托(delegate),我在 UIView
的哪个位置调用委托(delegate)方法(initWithFrame
?可能为时过早,并且可能未设置委托(delegate),awakeFromNib
?但是 View 是 100% 在代码中创建的,它没有 nib 文件)..
最佳答案
initWithFrame? might be to early, and the delegate might not be set.
事实上,当您在 initWithFrame:
中时,委托(delegate)不能被设置,因为在分配后对对象做的第一件事就是初始化,我. e.在 init 方法返回之前,您不能调用(嗯,至少不这样做是惯用的)任何其他方法。
您需要做的是拥有一个loadData
或reloadData
方法,委托(delegate)必须在将自己设置为 View 的委托(delegate)后显式调用该方法。即,从 View Controller 中,您可以这样调用它:
@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;
}
然后,在您的图表绘制 View 中,按如下方式实现- reloadData
:
- (void)reloadData
{
// Call the delegate here,
// then do the drawing
}
关于ios - UIView 工厂和委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13440178/