2013-04-12 45 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 ...

,並添加一個觀察者此通知你的控制器內