0

我是iOS开发的初学者。我有一个自定义视图:

@interface MyView : UIView {

在 ViewController 中,我将此视图添加为子视图(以另一种方式做会更好,也许在 Storyboard 中?):

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();
}

现在,如何获取myValueViewController 中的值?也许可以touchesEnded在 MyView 内部调用的侦听器或回调?

4

2 回答 2

0

好吧,一种简单的方法是在 中保留对视图控制器的引用MyView,例如,定义如下属性:

@property (weak,nonatomic) MyViewController *viewController;

然后在视图控制器中分配myView.viewController = self. 这样你就可以调用视图控制器上的任何方法MyView,例如,[viewController myView:self changedValue:myValue]或其他。

(而且,是的,可以直接在情节提要中添加自定义视图子类。只需在情节提要中添加一个泛型UIView并将其类更改为MyView。)

当然有许多替代方法,例如通知,或者只是MyView从视图控制器轮询一个属性,如果它只在某些时候感兴趣,等等。

于 2012-11-05T18:11:23.910 回答
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
}
于 2012-11-05T18:18:28.793 回答