使用协议 - 如何将消息发送回ViewController?

时间:2013-04-12 13:48:11

标签: ios objective-c delegates protocols

我将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?请给我一个例子的骨架,以便我可以使用它,或解释如何,因为我无能为力:)

感谢您的时间!

2 个答案:

答案 0 :(得分: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
    }

答案 1 :(得分:0)

一种方法是在touchesBegan中发布通知:withEvent: [[NSNotificationCenter defaultCenter] postNotification ...

并在控制器中添加此通知的观察者

相关问题