[英]ios pass data between custom view and view controller
我是iOS开发的初学者。 我有一个自定义视图:
@interface MyView : UIView {
在ViewController中,我将此视图添加为子视图(最好在故事板中用另一种方式来做?):
MyView *myView = [[MyView alloc]initWithFrame:myFrame];
[self.view addSubview:myView];
在其中,我遵循屏幕上的触摸,并且有一个touchesEnded方法:
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
// myValue is a class variable of MyView
myValue = doSomething();
}
现在,如何在ViewController中获取myValue
的值? 也许可以在MyView中的touchesEnded
内部调用的侦听器或回调?
好吧,一种简单的方法是在MyView
保留对视图控制器的引用,例如,定义一个属性,例如:
@property (weak,nonatomic) MyViewController *viewController;
然后在视图控制器中分配myView.viewController = self
。 这样,您就可以从MyView
调用视图控制器上的任何方法,例如[viewController myView:self changedValue:myValue]
或其他方法。
(而且,是的,可以直接在情节UIView
中添加自定义视图子类。只需在情节UIView
中添加通用UIView
并将其类更改为MyView
。)
当然,有许多替代方法,例如,通知,或者仅在特定时间从视图控制器轮询MyView
的属性(如果仅在特定时间关注)等。
例如,您可以在视图的touchesEnded方法中发布NSNotification :
[[NSNotificationCenter defaultCenter] postNotificationName:@"ViewDidTouch" object:self];
在视图控制器中侦听此通知。 要实现这一点,请在视图控制器的方法viewDidLoad中添加一行:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onViewDidTouch:) name:@"ViewDidTouch" object:nil];
然后在您的视图控制器中实现以下方法:
- (void) onViewDidTouch:(NSNotification*)notification
{
// do something
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.