0

UIImageViewメソッドを追加するためにサブクラス化しました。このオブジェクトを自分の上に置き、viewControllerそのオブジェクトに対してタッチ ジェスチャ レコグナイザを実行しています。私はそれらのいくつかを持っています。私の意図は、タッチすると、どのサブクラスがタッチされたかに応じて何かが発生することです(viewControllerどのサブクラスUIImageViewがタッチされたかをすでに区別できます)。

viewControllerそれに応じて行動できるように、メッセージ (タッチされたアイテムのプロパティ) を に送信したいと考えています。しかし、私はそれをすることができませんでした。この目的のためにプロトコルを実装しようとしましたが、うまくいかないようです。私の問題は、これがどのように機能するかを理解することだと思います。なぜなら、私は混乱し (デリゲートがタッチ認識エンジンとどのように相互作用するのか?)、動作するプロトコルを正常に実装できていないからです。

私のviewControllerは と呼ばれEditViewControllerます。私が作ったサブクラスUIImageViewが呼び出されClickableImageます(私には理由があります:)。これは以下を実装します:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    // some code calculating the index i want to return to the viewcontroller
}

これをすべて機能させるにはどうすればよいですか?そのインデックスを自分のに戻すにはどうすればよいviewControllerですか? 例のスケルトンを教えてください。それで作業したり、方法を説明したりできます。私は無知なので:)

お時間をいただきありがとうございます!

4

2 に答える 2

2

基本的に、プロトコルとデリゲートは、メッセージを別のコントローラーに送信してアクションを実行できるようにするためのものです。

あなたのUIImageViewサブクラスではClickableImage.h

@class  ClickableImage;
@protocol ClickableImageDelegate<NSObject>

-(void)delegateMethod:(id)sender;//This method will be executed in EditViewController

@end

@interface ClickableImage : UIViewController
@property(nonatomic, strong)id <ClickableImageDelegate>delegate;
@end

ClickableImage.m:

    //...
    @synthesize delegate;

    -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
    {
        // some code calculating the index i want to return to the viewcontroller
            id index;//initialize the index
            if([self.delegate respondsToSelector:@selector(delegateMethod:)]){
                 [self.delegate delegateMethod:index];
            }

    }

EditViewController.h:

@interface EditViewController : UIViewController<ClickableImageDelegate>

@property(nonatomic, strong) ClickableImage *clickableImageController;

EditViewController.m:

     //....
     @synthesize clickableImageController;
    -(void)viewDidLoad{
        self.clickableImageController.delegate = self;//Don't forget to make a property for clickableImageController 

}
    -(void)delegateMethod:(id)sender{

    //sender is the index, Do your stuff here
    }
于 2013-04-12T14:06:04.273 に答える
0

1 つの方法は、touchesBegan:withEvent: [[NSNotificationCenter defaultCenter] postNotification... 内に通知を投稿することです。

コントローラー内にこの通知のオブザーバーを追加するには

于 2013-04-12T14:05:57.163 に答える