ios - 将数据从自定义 View 传递到 ViewController

标签 ios uiview uiviewcontroller delegates

我在 XCode 上的单一 View 应用程序有一个自定义 View ,其大小约为整个 iPhone 屏幕的一半。我已经实现了一个只能在自定义 View 内部使用的绘图工具。自定义 View 记录绘图工具移动的距离。只有一个 ViewController,我想在自定义 View 框架外部的标签中显示距离变量。我需要使用协议(protocol)和委托(delegate)来执行此操作吗?或者有更简单的方法吗?过去几天我一直在使用协议(protocol)和委托(delegate)方法进行测试,但没有取得任何进展。

最佳答案

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

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

然后在 View Controller viewDidLoad 中添加:

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

同时添加到 Controller :

    - (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”的字典将包含键 NSKeyValueChangeNewKey 新设置的值。如果检索到该值,则可以更新标签。

关于ios - 将数据从自定义 View 传递到 ViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17201539/

相关文章:

ios - 如何使用自动布局调整 UILabel 宽度以适合文本?

iphone - XCode 如何处理具有多个目标的#import header 语句?

ios - 所有数据都显示在一行中

iphone - 在 UIView 中绘制线条动画

ios - 在没有动画时处理自定义过渡的结束?

ios - 社交媒体应用程序的最佳压缩质量?

ios - alpha 属性重置为 1.0 后,UIView 不会出现

ios 什么是 UITextField 边框颜色值

swift - 如何在 SKScene 中呈现 View Controller ?

ios - 尝试检查 View Controller 是否已加载,然后将其呈现在容器中(UISegmentedController)