我将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
?请给我一个例子的骨架,以便我可以使用它,或解释如何,因为我无能为力:)
感谢您的时间!
答案 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 ...
并在控制器中添加此通知的观察者