0

我在 XCode 上的单视图应用程序有一个自定义视图,它大约是整个 iPhone 屏幕大小的一半。我已经实现了一个只能在自定义视图内部使用的绘图工具。自定义视图记录绘图工具移动的距离。只有一个 ViewController,我想在自定义窗口框架之外的标签中显示距离变量。我是否需要使用协议和委托来执行此操作?还是有更简单的方法?在过去的几天里,我一直在使用协议和委托方法进行测试,但没有得到任何结果。

4

2 回答 2

1

首先在界面构建器中添加您的自定义视图作为主视图控制器视图的子视图,同时添加标签。然后将标签和视图的出口添加到视图控制器(我们分别称它们为 distanceLabel 和 drawView)。

现在将 distanceDrawn 声明为自定义视图的属性,并在移动工具时更新它以包含正确的数字。

然后在视图控制器 viewDidLoad 中添加:

    [drawView addObersver:self forKeyPath:@"distanceDrawn" options:NSKeyValueObservingOptionNew context:null]

还要添加到控制器:

    - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
    {
        if ([object isEqual:drawView]) {
            id distance = change[NSKeyValueChangeNewKey]; //change to appropriate type
            distanceLabel.text = [NSString stringWithFormat:@"%@", distance];
        }
    }

现在,每当您更改 distanceDrawn 时,都会调用此方法,并且名为 change 的字典将包含新设置的 key 值NSKeyValueChangeNewKey。如果您检索该值,则可以更新标签。

于 2013-06-19T21:53:23.110 回答
0

您的自定义视图应该具有绘图长度的属性。然后,您可以从任何引用自定义视图的类中读取值。

可能您还希望每次绘图长度增加时让视图控制器更新标签。您可以使用 Key-Value Observing 来处理它。当它的drawingLength 属性改变时,您注册来自自定义视图对象的通知。

您可以通过委托来执行此操作。在某些情况下,我认为这是一个更清洁的解决方案。很高兴明确您可以从自定义视图中收听哪些类型的更新。但是,这种情况正是 Key-Value Observing 的用途。

于 2013-06-19T21:45:56.867 回答