我是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
内调用的监听器或回调?
答案 0 :(得分:0)
嗯,一个简单的方法是在MyView
中保持对视图控制器的引用,例如,定义一个属性,如:
@property (weak,nonatomic) MyViewController *viewController;
然后在视图控制器中分配myView.viewController = self
。这样,您就可以从MyView
调用视图控制器上的任何方法,例如[viewController myView:self changedValue:myValue]
或其他任何方法。
(并且,是的,可以直接在故事板中添加自定义视图子类。只需在故事板中添加通用UIView
并将其类更改为MyView
。)
当然有许多替代方法,例如通知,或者只是在视图控制器中轮询MyView
的属性,如果它在某些时候只是感兴趣,等等。
答案 1 :(得分:0)
例如,您可以在视图的 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
}