Ios 从自定义视图向ViewController传递数据
我在XCode上的单视图应用程序有一个自定义视图,大约是整个iPhone屏幕的一半大小。我已经实现了一个绘图工具,它只能在自定义视图中使用。自定义视图记录绘图工具移动的距离。由于只有一个ViewController,我希望在自定义fiew帧之外的标签中显示距离变量。我是否需要使用协议和代理来执行此操作?还是有更简单的方法?在过去的几天里,我一直在使用protocols and delegates方法进行测试,但没有取得任何进展。您的自定义视图应该具有图形长度属性。然后,可以从任何引用自定义视图的类中读取该值 您可能还希望视图控制器在每次图形长度增加时更新标签。你可以通过观察键值来处理这个问题。当自定义视图对象的drawingLength属性更改时,可以从该对象注册通知Ios 从自定义视图向ViewController传递数据,ios,uiview,uiviewcontroller,delegates,Ios,Uiview,Uiviewcontroller,Delegates,我在XCode上的单视图应用程序有一个自定义视图,大约是整个iPhone屏幕的一半大小。我已经实现了一个绘图工具,它只能在自定义视图中使用。自定义视图记录绘图工具移动的距离。由于只有一个ViewController,我希望在自定义fiew帧之外的标签中显示距离变量。我是否需要使用协议和代理来执行此操作?还是有更简单的方法?在过去的几天里,我一直在使用protocols and delegates方法进行测试,但没有取得任何进展。您的自定义视图应该具有图形长度属性。然后,可以从任何引用自定义视图的
您可以通过一个代理来完成此操作。在某些情况下,我认为这是一个更干净的解决方案。弄清楚您可以从自定义视图中监听哪些类型的更新很好。但是,这种情况正是观察键值的目的。首先在界面生成器中将自定义视图添加为主视图Consollers视图的子视图,同时添加标签。然后将标签和视图的插座添加到视图控制器(让我们分别称它们为distanceLabel和drawView) 现在将DistanceDrawed声明为自定义视图的属性,并在移动工具时更新它以包含正确的编号 然后在视图控制器视图中添加:
[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];
}
}
现在,无论何时更改DistanceDrawed,都将调用此方法,名为change的字典将包含键的新设置值
NSKeyValueChangeNewKey
。如果检索到该值,则可以更新标签。所有这些都是有效的解决方案,但我建议设置代理协议以通知视图控制器更新。虽然键值观察肯定会起作用,但它通常用于控制器不是被修改对象的实际所有者的情况。这是委托协议的一种标准用法。检索值是什么意思?除了你的最后一句话之外,到那时为止的一切对我来说都是有意义的。谢谢@食人族对不起,我真的没看到你回应。我的意思是,您可以在-observeValueForKeyPath:ofObject:change:context:
中调用[change objectForKey:NSKeyValueChangeNewKey]
,并使用返回值更新标签,就像上面的代码一样。希望不会太晚。