ios - UIView 工厂和委托(delegate)

标签 ios uiview delegates

我想在 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 方法返回之前,您不能调用(嗯,至少不这样做是惯用的)任何其他方法。

您需要做的是拥有一个loadDatareloadData 方法,委托(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/

相关文章:

iphone - 增加 tableView 单元格的大小?

objective-c - 使用命名参数实现委托(delegate)

c# - 这个委托(delegate)的使用是好是坏?

objective-c - 根据目标创建不同的 RootViewController 实例

iOS/可读性

Xcode 11 GM 中缺少 iOS 12.4

iphone - 如何在 iOS 中创建一个小弹出窗口?

ios - 条形图未缩放至 BarChartView 的大小

ios - iOS 中检查音频是否已结束播放

c# - 在 C# 中将委托(delegate)转换为通用委托(delegate)