2013-04-12 102 views
0

我分类为UIImageView以添加其他方法。我将这个对象放置在我的viewController上,并且我有一个触摸手势识别器启动并运行该对象。我有一些这些。我的意图是,根据我的小类UIImageView中的哪些被触摸(可以已经区分哪些已经被触摸),在触摸时,将发生在viewController中的事情。使用协议 - 如何将消息发送回ViewController?

我想发送一条消息(触摸物品属性)到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?请给我一个例子的骨架,以便我可以使用它,或解释如何,因为我很无知:)

谢谢你的时间!

+0

如果您发布作为协议的代码,我们也许能够指出你在哪里错了。 –

+0

为什么人们downvote我的文章?我认为它对于处理这种问题的新人非常有帮助 – Zephyer

回答

2

基本上,协议代表是为了让你发送消息给另一个控制器来执行一个动作。

在你UIImageView subcalss,该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 
    } 
+0

感谢您的快速回复 - 我不需要综合代表?或在某处设置委托?我把一些NSLog用于在DelegateMethod进行测试,它不起作用 – Zephyer

+0

是的,你应该综合这个委托,我编辑了我的答案。 – Malloc

+0

看起来不起作用,我添加了NSLog到你的'if',它甚至不会到达那里 – Zephyer

0

一种方法是来发表您的touchesBegan内部通知:withEvent:方法 [NSNotificationCenter defaultCenter] postNotification ...

,并添加一个观察者此通知你的控制器内