将方法调用传递给对象

时间:2014-05-09 09:07:21

标签: ios objective-c

我正在尝试创建自定义swipe gesture recognizer来设置允许的角度和距离。 到目前为止它工作得很好,但在视图控制器中需要很多代码。所以我的问题是,有可能以某种方式传递方法调用,如:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

在我的手势识别器对象的视图控制器中,这样我就不必写这样的东西

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
 [self.swipeGestureRecognizer touchesBegan:touches withEvent:event];
} 

进入我的视图控制器。我认为UIGestureRecognizer中的构建以某种方式做到了,但我无法弄清楚它是如何工作的。

我真的很感激你的帮助。

[编辑]

通用示例:我有一个对象A,它创建一个对象B.A有一个方法c有时被调用。我想要实现的是当A中的c被调用时,调用B的方法d。所以以某种方式转发或传递此方法调用。

具体示例:每次触摸屏幕时,我的视图控制器都会调用以下方法:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

但我实际上希望我的GestureRecognizer对象处理这些信息,所以我在GestureRecognizer对象中使用相同的方法,并且我希望每次调用视图控制器中的对应方时调用此方法。

2 个答案:

答案 0 :(得分:1)

子类UIGestureRecognizer并创建一个名为CustomGestureRecognizer的类。 它的.m文件看起来像这样

@implementation CustomGestureRecognizer

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {    
   // do your code here
}

@end

在子类中的某些位置,您必须将识别器的状态更改为

  

UIGestureRecognizerStateRecognized

当注册当前手势时,否则更改为

  

UIGestureRecognizerStateFailed

现在,在想要使用此识别器的视图控制器中执行:

CustomGestureRecognizer * recognizer = [[CustomGestureRecognizer alloc] initWithTarget:self action:@selector(handleChange:)];
recognizer.delegate = self;
[self.view addGestureRecognizer:recognizer];

此处给出详细解释Apple doc,在子类化下。

答案 1 :(得分:0)

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    [self.swipeGestureRecognizer touchesBegan:touches withEvent:event];
}

以上将以递归调用结束,并且您的程序将在某个时间点崩溃。