如何在不继承UIView或使用UIViewControllers的情况下捕获- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
等触摸事件。
我发生了一个以编程方式创建的简单UIView,我需要检测基本的点击事件。
答案 0 :(得分:4)
如果您正在为iOS 4编写应用程序,请使用UIGestureRecognizer。然后你可以做你想做的事。识别手势而不进行子类化。
否则,子类化是要走的路。
答案 1 :(得分:1)
没有理由不这样做。如果你继承并添加任何东西,它只是由另一个名称调用的UIView
。你所做的就是拦截你感兴趣的那些函数。不要忘记你可以在你的子类'[super touchesBegan:touches]
中touchesBegan
做{{1}}如果你不想阻止响应者进入链中事件也是如此。
答案 2 :(得分:1)
我不是为什么你不想使用普通的子类化UIView来捕捉触摸事件的方法,但如果你真的需要做一些奇怪或偷偷摸摸的事情,你可以捕捉所有事件(包括触摸事件)之前它们通过在UIWindow级别捕获/处理sendEvent:方法而被发送到视图层次结构中。
答案 3 :(得分:1)
CustomGestureRecognizer.h
#import <UIKit/UIKit.h>
@interface CustomGestureRecognizer : UIGestureRecognizer
{
}
- (id)initWithTarget:(id)target;
@end
CustomGestureRecognizer.mm
#import "CustomGestureRecognizer.h"
#import <UIKit/UIGestureRecognizerSubclass.h>
@interface CustomGestureRecognizer()
{
}
@property (nonatomic, assign) id target;
@end
@implementation CustomGestureRecognizer
- (id)initWithTarget:(id)target
{
if (self = [super initWithTarget:target action:Nil]) {
self.target = target;
}
return self;
}
- (void)reset
{
[super reset];
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[super touchesBegan:touches withEvent:event];
[self.target touchesBegan:touches withEvent:event];
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
[super touchesMoved:touches withEvent:event];
[self.target touchesMoved:touches withEvent:event];
}
- (void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
[super touchesEnded:touches withEvent: event];
[self.target touchesEnded:touches withEvent:event];
}
@end
用法:
CustomGestureRecognizer *customGestureRecognizer = [[CustomGestureRecognizer alloc] initWithTarget:self];
[glView addGestureRecognizer:customGestureRecognizer];