响应者链中的iPhone自定义类/对象

时间:2009-05-09 17:34:14

标签: iphone

我正在寻找将自定义类添加到响应者链的策略,最佳实践和解决方案。这是因为我意识到我在几个不同的应用程序中以相同的方式处理触摸事件。为了简化生活,我想将功能转移到自定义类中,让该类成为触摸事件的第一响应者。由于我的前几个想法不起作用,我意识到这不会成为我可以解决的临时问题。

我根据我读过的不同文档,帖子等进行了多次尝试(这就是为什么我现在不发布源代码的原因)。我最近的尝试来自UIResponder并且有一个UIView成员存储指向当前视图的指针。

在我花费太多时间“搞清楚”之前,我想知道是否有人有任何想法。

所以我的问题是'如何添加自定义类作为第一响应者,特别是接收触摸事件'?

2 个答案:

答案 0 :(得分:2)

使用Roger的建议,我使用的解决方案如下:

宣言(touchmyself.h)

#import <UIKit/UIViewController.h>
@interface UIViewController (TouchMyself)
    - (void) touchesBegan: (NSSet *) touches withEvent: (UIEvent *) event;
    - (void) touchesMoved: (NSSet *) touches withEvent: (UIEvent *) event;
    - (void) touchesEnded: (NSSet*) touches withEvent: (UIEvent*) event;
    - (void) touchesCancelled: (NSSet*)touches withEvent: (UIEvent*) event;
@end 

实施(touchmyself.m)

#import "touchmyself.h"
@implementation UIViewController (TouchMyself)
- (void) touchesBegan: (NSSet *) touches withEvent: (UIEvent *) event
{
    // Do Stuff
}

...
@end

消费者声明(some_view_controller.h)

@interface ViewSwitchBox : UIViewController 
{
    // Declare Stuff
}

在阅读了几篇关于类别的文档后,“iPhone SDK应用程序开发”第1.5章对此进行了深入研究。

-isdi-

答案 1 :(得分:0)

你的解决方案听起来很奇怪,因为UIView本身就是一个UIResponder。

如果您有共同的事件处理代码,为什么不在UIView或UIResponder上声明一个类别,然后您可以从所有UIView(或UIResponder)子类(包括UIApplication,UIWindow和UIControl)访问该类别。