でチャートを描きたいUIView
。問題は、ビューにデータ(ポイント)を取得する方法です。プロトコルを作成し、デリゲートメソッドを呼び出すUIViewController
デリゲートとしてを設定した場合( ?は早い可能性があり、デリゲートは設定されていない可能性がありますか?しかし、ビューはコードで100%作成されているため、ペン先はありませんファイル) ..UIView
initWithFrame
awakeFromNib
3 に答える
initWithFrame? 早すぎる可能性があり、デリゲートが設定されていない可能性があります。
実際、割り当て後にオブジェクトで最初に行うことは初期化であるため、デリゲートを設定することはできませんinitWithFrame:
。つまり、 init メソッドが戻るまで、呼び出すことはできませんしたがって、少なくとも) 他の方法。
あなたがしなければならないことは、デリゲートが自分自身をビューのデリゲートとして設定した後に明示的に呼び出す必要があるloadData
orメソッドを持つことです。reloadData
つまり、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;
}
次に、チャート描画ビューで、次のように実装- reloadData
します。
- (void)reloadData
{
// Call the delegate here,
// then do the drawing
}
より良い方法は、UIViewController
の代わりに使用することUIView
です。そのビューはデータを管理する必要があるためです。データの管理は UIViewController の仕事です。
プロトコルを作成しますが、デリゲートとは呼ばないでください。それを dataSource と呼びます:D
とにかく、最初にデータが必要になったときに呼び出します....できるだけ遅く.. initではなく..おそらくsetDataSource呼び出しで呼び出します。
または、初めて描画してデータがないことがわかったとき..
UITableView を見て、彼がどのようにそれを行うかを確認し、それを模倣します