0

私のコードUIViewControllerは、オブジェクト\クラスをインスタンス化しています。これは、塗りつぶされた円などを描くフレームを持つUIViewです。その2番目のクラスフレームに、タップが発生したときにその2番目のクラスを閉じて\解放したいジェスチャーを追加し、最初のオブジェクト (UIViewController 内) に記述されたメソッドをトリガーします。この2番目のクラスはタップを認識しますが、クラスをそれ自体から解放し、最初のクラスに何かをするように指示する方法がわかりません(メソッドを呼び出します)?

これが明確であることを願っています。それについてどうすればいいですか?

ありがとう

4

1 に答える 1

0

私の意見では、最も簡単な方法は、2 番目のクラスのデリゲートを作成することです。たとえば、FirstClass と SecondClass があり、それぞれ独自のファイルがあると仮定します。

FirstClass では、SecondClass のインスタンスをセットアップする (UIView をインスタンス化する) と、次のようになります。

SecondClass *class2 = [[SecondClass alloc] init....];
// set up the delegate, which basically creates a link between SecondClass and FirstClass;
class2.delegate = self;

SecondClass.h では、次のように設定する必要があります。

@property (nonatomic, strong) id delegate;

SecondClass.m には、デリゲートの合成値とジェスチャ処理メソッドがあります。

// add the FirstClass header file;
#import "FirstClass.h"

// synthesize the value;
@synthesize delegate;

// later on into the implementation file;
- (void)gestureHandlingMethod:(UIGestureRecognizer *)gesture {
    // do whatever you need for the gesture in SecondClass;
    // send a message to FirstClass (now defined as delegate of SecondClass);
    [self.delegate handleGesture:gesture forClass:self];
}

最後に、必要なことを実行できるように、このジェスチャ処理メソッドを FirstClass に追加する必要があります。そこで、FirstClass.h に を追加し-(void)handleGesture:(UIGestureRecognizer *)gesture forClass:(id)secondClass;ます。次に、次のように、このメソッドを FirstClass.m に追加して終了します。

- (void)handleGesture:(UIGestureRecognizer *)gesture forClass:(id)secondClass {
    // do what you want here from within the FirstClass;
    [self doSomethingWithGestureIfYouWant:gesture];
    // then deallocate SecondClass if that's what you want to do;
    [secondClass dealloc]; // you may need to specify [(SecondClass *)secondClass dealloc];
}

それはそれを行う必要があります。これは、さまざまなファイルをリンクするちょっとした方法です。うまくいけば、これはあなたを助けます。

于 2012-06-22T00:40:31.887 に答える