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];
            }

    }

编辑视图控制器.h:

@interface EditViewController : UIViewController<ClickableImageDelegate>

@property(nonatomic, strong) ClickableImage *clickableImageController;

编辑视图控制器.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

一种方法是在您的 touchesBegan:withEvent: [[NSNotificationCenter defaultCenter] postNotification...

并在您的控制器内为此通知添加观察者

于 2013-04-12T14:05:57.163 回答