0

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

myValueでは、ViewControllerの値を取得するにはどうすればよいでしょうか。touchesEndedたぶん、 MyView内で呼び出すことができるリスナーまたはコールバックですか?

4

2 に答える 2

0

たとえば、ビューのtouchesEndedメソッドにNSNotificationを投稿できます。

[[NSNotificationCenter defaultCenter] postNotificationName:@"ViewDidTouch" object:self];

ビューコントローラでこの通知を聞いてください。これを実現するには、ViewControllerのメソッドviewDidLoadに次の行を追加します。

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onViewDidTouch:) name:@"ViewDidTouch" object:nil];

次に、ViewControllerに以下のメソッドを実装します。

- (void) onViewDidTouch:(NSNotification*)notification
{
    // do something
}
于 2012-11-05T18:18:28.793 に答える
0

簡単な方法は、View Controller への参照を に保持することですMyView。たとえば、次のようなプロパティを定義します。

@property (weak,nonatomic) MyViewController *viewController;

次に、View Controller で assign を割り当てmyView.viewController = selfます。MyViewこのようにして、たとえば、などからView Controllerのメソッドを呼び出すことができます[viewController myView:self changedValue:myValue]

(もちろん、カスタム ビュー サブクラスをストーリーボードに直接追加することも可能です。ストーリーUIViewボードにジェネリックを追加し、そのクラスを に変更するだけMyViewです。)

MyViewもちろん、通知や、特定の時間にのみ関心がある場合は、View Controller からプロパティをポーリングするなど、多くの代替方法があります。

于 2012-11-05T18:11:23.910 に答える